> The real problem is the core NodeJS libraries aren't promise compliant.
This isn't a problem at all in practice.
To say that node core is not "promise compliant" gives people the idea that there is something that prevents them from using promises in node. In reality, most promise libraries have a "denodeify" function that will convert any function that expects a node-style callback into one that returns a promise instead.
var fs = require('fs');
var rsvp = require('rsvp');
// Create a version of fs.readFile that returns
// a promise instead of expecting a callback.
var readFile = rsvp.denodeify(fs.readFile);
readFile('/etc/passwd', 'utf8').then(function (contents) {
// do something with the file contents
}, function (error) {
// handle the error
});
It is similarly easy to convert functions that expect other types of callbacks (read: not node-style callbacks where the first argument is always an error) to functions that return promises using deferreds.
That's a good pattern, but obnoxious to apply on large numbers of functions. If something just did this for you in advance, that'd be what I'm looking for.
Trouble is, NodeJS set a convention and now everyone adheres to it. I'm not complaining there's standards, in fact that's a good thing. Part of me is just disappointed that the promise standardization happened too late in the game for NodeJS to build around it.
I assume that some future major revision of node will move its API across and that in the meantime, promise versions of core libraries will start appearing on npm.
This isn't a problem at all in practice.
To say that node core is not "promise compliant" gives people the idea that there is something that prevents them from using promises in node. In reality, most promise libraries have a "denodeify" function that will convert any function that expects a node-style callback into one that returns a promise instead.
It is similarly easy to convert functions that expect other types of callbacks (read: not node-style callbacks where the first argument is always an error) to functions that return promises using deferreds.