假設我使用Node.js嘗試運行兩個異步調用以獲得一些答案。我知道有一個異步包,你可以傳遞兩個函數和一個可選的回調函數。Nodejs並行異步調用,但優先
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.
}
}
}
有沒有更好的方法來做到這一點?
您應該嘗試承諾。這將如'var second = fun2();返回fun1()。then(function(r){return r || second;})' – Bergi
謝謝Bergi,這很有幫助。我會投你:) – Evilsanta
謝謝@Bergi,這是有幫助的。我會投你:)。我還有一個問題。在then()中,它返回r,這是答案,或者是'second',這是一個承諾。我下一步如何處理? – Evilsanta