Here is working snippet with promises using Q.nfcall
:
var Q = require('q');
var a = Q.nfcall(function async_f1(callback) {
setTimeout(function() {
callback(null, "Async function 1...");
}, 1000);
});
var b = Q.nfcall(function async_f2(callback) {
setTimeout(function() {
callback(null, "Async function 2!...");
}, 1000);
});
var c = Q.nfcall(function async_f3(callback) {
setTimeout(function() {
callback(null, "Second async function 3!...");
}, 1000);
});
function doAll() {
Q.all([a, b, c]).then(function(result) {
console.log(result);
}).fail(function(err) {
console.log(err);
})
}
doAll();
Here is Q.denodeify
version:
var Q = require('q');
var a = function async_f1(callback) {
setTimeout(function() {
callback(null, "Async function 1...");
}, 1000);
};
var b = function async_f2(callback) {
setTimeout(function() {
callback(null, "Async function 2!...");
}, 1000);
};
var c = function async_f3(callback) {
setTimeout(function() {
callback(null, "Second async function 3!...");
}, 1000);
};
var a_promise = Q.denodeify(a);
var b_promise = Q.denodeify(b);
var c_promise = Q.denodeify(c);
function doAll() {
Q.all([a_promise(), b_promise(), c_promise()]).then(function(result) {
console.log(result);
}).fail(function(err) {
console.log(err);
})
}
doAll();
My previous attempts were failing because I missed an important point:
In order to Q.nfcall
work, your callback must use callback(error, data)
pattern. Previously I didn't add error argument so I didn't get any errors but neither any output. Once I fixed it as callback(null, "Async function 1")
it started to work.