Maybe should be mentioned in documentation.
Problem with promisifyAll of Node's fs for method fs.existsAsync.
Obvious reason: fs.exists doesn't callback with an err for first argument, just the result.
Workaround for many uses: Use fs.stat instead.
Example code to illustrate problem:
var Promise = require('bluebird');
var fs = require('fs');
Promise.promisifyAll(fs);
function promise(path) {
fs.exists(path, function(exists) {
console.log("callback with path " + path + " exists " + exists);
});
fs.stat(path, function(err, stats) {
if (err) {
console.log("stat callback with path " + path + " err " + err);
} else {
console.log("stat callback with path " + path + " file " + stats.isFile() + ", directory " + stats.isDirectory());
}
});
return fs.existsAsync(path)
.then(function resolve(exists) {
console.log("promise with path " + path + " resolves exists " + exists);
},function reject(reason) {
console.log("promise with path " + path + " rejects reason " + reason);
});
}
Promise.try(promise,'/');
Promise.try(promise,'/tmp');
Promise.try(promise,'/somethingimprobable');
with bluebird 2.5.0 (and 2.4.3) produces output
callback with path / exists true
promise with path / rejects reason OperationalError: true
callback with path /tmp exists true
promise with path /tmp rejects reason OperationalError: true
callback with path /somethingimprobable exists false
promise with path /somethingimprobable resolves exists undefined
which means result true gets wrapped as an error.
Maybe should be mentioned in documentation.
Problem with promisifyAll of Node's fs for method fs.existsAsync.
Obvious reason: fs.exists doesn't callback with an err for first argument, just the result.
Workaround for many uses: Use
fs.statinstead.Example code to illustrate problem:
with bluebird 2.5.0 (and 2.4.3) produces output
which means result true gets wrapped as an error.