如您所知,用这样的代码定义的async.parallel:
async.parallel([
function (callback) {
callback(err, objects);
},
function (callback) {
callback(err, status);
},
function (callback) {
callback(err, status);
},
], function (err, results) {
//smth with results[N] array...
});并行执行所有任务。但是,我需要第一个函数(确切地说,是objects)的回调结果才能在第二个和第三个函数中导航。换句话说,第一步函数,第二步- ( 2rd +3并行于第一步的结果)。async.waterfall似乎是个坏主意,因为:
有什么想法吗?谢谢!
发布于 2013-07-11 03:32:42
你需要waterfall和parallel。
function thing1(callback) {...callback(null, thing1Result);}
function thing2A(thing1Result, callback) {...}
function thing2B(thing1Result, callback) {...}
function thing2(thing1Result, callback) {
async.parallel([
async.apply(thing2A, thing1Result),
async.apply(thing2B, thing1Result)
], callback);
}
async.waterfall([thing1, thing2], function (error) {
//all done
});发布于 2013-07-11 07:39:35
不需要使用异步。使用异步,您基本上是黑装箱您的应用程序。因为我不喜欢简单任务的魔力,香草js:
var f1 = function (cb){
...
cb (null, "result from f1"); //null error
};
var f2 = function (resultFromF1, cb){
...
cb (null); //null error
};
var f3 = function (resultFromF1, cb){
...
cb (null); //null error
};
var main = function (cb){
f1 (function (error, resultFromF1){
if (error) return cb ([error]);
var errors = [];
var remaining = 2;
var finish = function (error){
if (error) errors.push (error);
if (!--remaining){
//f2 and f3 have finished
cb (errors.length ? errors : null);
}
};
f2 (resultFromF1, finish);
f3 (resultFromF1, finish);
});
};
main (function (errors){
if (errors) return handleError (errors); //errors is an array
...
});https://stackoverflow.com/questions/17582744
复制相似问题