首页 > 解决方案 > 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));
        });
}

问题是循环中的函数本身就是一个承诺。

标签: javascriptjquerypromise

解决方案


你的函数.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);
})

推荐阅读