Предположим, я использую 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.
}
}
}
Есть лучший способ это сделать?
var second = fun2(); return fun1().then(function(r) { return r || second; })
- person Bergi   schedule 22.07.2014then
, он будет ждать этого. В этом и смыслthen
:-) - person Bergi   schedule 22.07.2014