与一系列承诺链接

时间:2015-10-08 15:44:24

标签: javascript jquery arrays ajax

我正在进行ajax调用以获取一系列结果。从那个数组我正在进行一系列的ajax调用,并试图对结果做些什么。当我返回strdup并继续Promise.all()时,.then(function(moreData){})处于待处理状态。我错过了什么?我没想到在每个moreData函数解析之前运行该函数。

doSomethingElse

doSomething() .then(function(data){ data = data.d.results; return Promise.all(data.map(function(group){ return doSomethingElse(group.Id); })); }) .then(function(moreData){ //moreData is in pending state }) .then(null, function(err){ alert(err); }); doSomething函数返回一个延迟对象。

doSomethingElse

1 个答案:

答案 0 :(得分:0)

由于您的承诺基于jQuery,请使用jQuery的all版本.when(),但这需要一些额外的代码:

doSomething()
.then(function(data){
    data = data.d.results;

    var results = new Array(data.length); // Array to hold the results of doSomethingElse
    return $.when.apply($, data.map(function(group, i){
        // Attach a done handler to async operation, put result in results array and return
        return doSomethingElse(group.Id).done(function(x) { results[i] = x; });
    }).unshift($.Deferred().resolve(results)); /* unshift a resolved deferred so that
                                                  moreData recieve results */
})
.then(function(moreData){
    // moreData is now and array with the resolved results of doSomethingElse()
})
.then(null, function(err){
    alert(err);
});