虽然我现在可以将函数外部的变量设置为微型站点,或者将第二个函数的回调更改为 function(err, result) { cb(cb, result, microsite)}
我想知道比上面建议的更好的选择。这是我的代码:
var funcs = [
function(cb){
Microsite.findOne({_id: id1}, cb);
},
function(microsite, cb){
VideoAccount.findOne({_id: id2}, cb);
},
function(videoAccount, cb) {
execute(microsite, videoAccount, cb);
});
async.waterfall(funcs, function(err, result){...});
最佳答案
您可以使用auto功能:
async.auto({
microSite: function(cb) {
Microsite.findOne({_id: id1}, cb);
},
videoAccount: function(cb) {
VideoAccount.findOne({_id: id2}, cb);
},
thirdFunction: ["microSite", "videoAccount", function(results, cb) {
execute(results.microSite, results.videoAccount, cb);
}]
}, function(error, result) {...});
其中最终结果
是以下形式的对象:
result = {
microSite,
videoAccount,
thirdFunction
}
注意:第三个函数中的参数取决于您的版本:
1.x 是函数(cb,结果)
2.x 是函数(结果,cb)
就我个人而言,我在任何地方都使用自动来代替并行、 waterfall 和串行。如果您的代码根据当前需求发生变化,将来可以更轻松地进行重构。
关于javascript - 从第三个函数的异步第一个函数获取结果的更好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37260428/