我对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(...);
}
答案 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);
}
}