【发布时间】:2020-05-27 18:12:58
【问题描述】:
如您所见,它仅打印 console.log("Testing") 而不会继续处理 asyncCall 中的其他日志
let i = 0;
function resolveAfter2Seconds() {
return new Promise(resolve => {
setTimeout(() => {
if (i < 3) {
console.log("Testing");
resolveAfter2Seconds();
} else {
resolve("READY DONE!");
}
i++;
}, 2000);
});
}
async function asyncCall() {
console.log("calling");
const result = await resolveAfter2Seconds();
// expected output: 'resolved'
console.log("waiting for result");
console.log(result);
console.log("send array");
}
asyncCall();
【问题讨论】:
-
你永远不会兑现你做出的第一个承诺。您只需递归调用该函数并最终解决进一步的承诺之一,但不是顶级承诺。
-
任何示例谢谢。那么可能是存储所有的承诺并一次性解决所有问题?
-
这将解决您的问题:
resolveAfter2Seconds().then(resolve);,因为并非所有路径都指向承诺的解决方案。 -
if (i < 3) { console.log("Testing"); resolveAfter2Seconds().then(resolve); } -
你会的。当您最终进入
else一次时,您只会解决最顶层的承诺(以及整个链)。在那之前,你会堆积待处理的 Promise,然后像多米诺骨牌一样一次性解决它们。
标签: javascript promise