javascript - JS/jQuery 承诺
问题描述
我尝试使用 jQuery 处理 JS 承诺。我有一个这样的承诺链:
function myPromisesChain(data)
{
return $.when(data)
.then(firstStep)
.then(secondptStep)
.then(thirdStep)
// ...n Step
.then(finalStep)
.always(function(data){
console.log('FINISHED: ' + JSON.stringify(data));
});
}
很好,但是如果我需要在循环中执行一个步骤,该怎么办?伤心,但到目前为止我找不到正确的语法......我期待这样的事情(大约):
function myPromisesChain(data)
{
return $.when(data)
.then(firstStep)
.then(secondptStep)
.then(function(data){
var counter = 0;
var limit = 3;
while(counter<limit){
thirdStep(data.transaction[counter]);
counter++;
}
return data;
})
// ...n Step
.then(finalStep)
.always(function(data){
console.log('FINISHED: ' + JSON.stringify(data));
});
}
问题是循环中的函数本身就是一个承诺。
解决方案
你的函数.then
应该返回一个 Promise。假设thirdStep
确实返回了一个 Promise,您可以随时将其返回值添加到一个数组中,然后使用它Promise.all
来确保它们都已解决。
.then(function(data) {
var counter = 0;
var limit = 3;
var returns = [];
while(counter<limit){
returns.push(thirdStep(data.transaction[counter]));
counter++;
}
return Promise.all(returns);
})