$ .when.apply在promise数组中的一个promise中被延迟时不工作

时间:2016-01-12 10:08:34

标签: javascript jquery

我有一个数组存储从不同函数返回的promise。我用过

_.each(someDiffArray,function(element){ 
       var promise = renderSomething(); 
       promiseArray.push(promise);
  } 

其中renderSomething有时会返回延迟的承诺。

$.when.apply($, promiseArray).done(function() {
    //doSomething
});

但是当promiseArray中的一个或多个承诺被推迟并且它已被解决且其他承诺尚未完成或已解决时,控制权将进入$.when.apply的回调函数。

我不知道为什么会这样,有人可以帮忙吗?是因为延迟的行为还是存在其他问题?

1 个答案:

答案 0 :(得分:-1)

您可以使用像BlueBird这样的promise库。以下是您要实现的目标示例。以下是一些承诺功能,在解决方案上我会做点什么:

function a(){
    return Promise.resolve("a");
}
function b(){
    return Promise.resolve("b");
}
function c(){
    return Promise.resolve("c");
}
function d(){
    return Promise.resolve("d");
}
function e(){
    return Promise.resolve("e");
}
function f(){
    return Promise.resolve("f");
}

现在

Promise.all([
    a(),
    b(),
    c(),
    d(),
    e(),
    f()
]).then(function(response){
    console.log(response);
}).catch(function(er){
    console.error("Err: ", er);
})
当所有承诺成功解决时,将调用

then(),否则如果任何承诺被拒绝,将调用catch()。小提琴:https://jsfiddle.net/6wk1uzqu/