假设我使用Node.js尝试运行两个异步调用以获得一些答案。我知道有一个异步包,您可以在其中传递两个函数和一个可选的回调。
async.parallel([fun1(){callback(null,1);},
fun2(){callback(null,2);}],
function(err, results) {
});
但是,假设我现在有一个优先级,如果fun1返回一个值,那么我不需要fun2的答案,只有当fun1返回null时,我才等待fun2。所以我不想使用回调函数,因为回调函数等待两个函数完成,并且fun2可能需要很长时间。
现在,我只是通过为两个异步调用创建回调函数来使用一种非常详尽的方法。
function(){
var theAnswer,FromFun1,FromFun2;
var reply1,reply2;
fun1(reply1="answered";FromFun1=1;complete());
fun2(reply2="answered";FromFun2=2;complete());
function complete(answer){
if(reply1=="answered"){
theAnswer=FromFun1;
}else if(reply1==null){
// Don't do anything because fun1 is not finished running.
}else if(reply2=="answered"){
theAnswer=FromFun2;
}else{
// Both have no answer, err.
}
}
}
有一个更好的方法吗?
我在这种情况下使用的技巧是在回调的第一个参数中返回“ done”:
async.parallel([
function(callback){
callback("done",1);
},
function(callback){
callback(null,2);
}
], function(err, results) {
console.log(err, results); // done [ 1 ] or done [ 1 , 2 ]
});
听起来像是黑客,我通常不这样做,但在这种情况下,这种情况很少见,实际上可以使代码保持干净……只是记录下来,以便其他人知道您的意图。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句