如何在JavaScript Promise链中使用循环

时间:2019-02-07 18:44:52

标签: javascript promise es6-promise

我对JS相对陌生,无法将promise概念应用于我的用例,我像其他人一样检查了this SO,但无法为我的案例推导解决方案。 我需要在循环内调用promise,但只有在循环完成后才应调用下一个“ then”。 Shuold可以在JS中使用吗?

function startCooking(ingredients) {
    Utility.startConnection()
        .then(
            function (connectionTime) {             
                for (let [key, plainVector] of ingredients) {
                    encryptIngredients(plainVector)
                        .then(
                            function (encryptedBinary) {
                                return Utility.cookDinner();
                            }
                        ).then(
                            function (dinner) {                             
                                console.log(...);
                            }
                    );
                }
            }
        ).catch(
            ...
        );              
}

function encryptIngredients() {
    return new Promise(...);
}

1 个答案:

答案 0 :(得分:1)

这大致就是它的工作方式。

如果此函数加密单个成分:

function encryptIngredient(ingredient) {

   return new Promise(...);

}

然后此函数对成分列表进行加密:

function encryptIngredients(ingredients) {

   // Note that 'shift' changes the array
   const current = ingredients.shift();
   return encryptIngredient(current).then( () => {
      if (ingredients.length > 0) {
        return encryptIngredients(ingredients);
      }
   });       

}

这是最后一个函数的异步/等待版本。简单得多:

async function encryptIngredients(ingredients) {

   for(const ingredient of ingredients) {
      await encryptIngredient(ingredient);
   }    

}