我正在进行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
答案 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);
});