繁体   English   中英

Node.js:异步函数似乎不等待 for 循环内 Promise 的解析

[英]Node.js: Async function seems to not wait for resolve of Promise within for loop

For 循环在第一个await new Promise被执行后结束,没有任何代码。 如果我理解正确,每次迭代应该在Promise解决之前暂停 2 秒, console.log输出指定的字符串,迭代结束。 我应该如何重写代码以使其按预期工作?

'use strict';

(async function () {
    for (let i = 0; i < 5; i++) {
        await new Promise(resolve => { setTimeout(() => { resolve }, 2000) });
        console.log('end of loop');
    }
})();

在您的代码段中setTimeout将调用匿名函数,该函数将resolve作为表达式进行计算,该函数返回一个函数。 您需要显式调用resolve()或将其作为function类型的第一个参数传递给setTimeout

改变

setTimeout(() => { resolve }, 2000)

setTimeout(resolve, 2000)

或者

setTimeout(() => { resolve() }, 2000)

你可以这样写,

'use strict';

var wait2Sec = function (time = 2000) {
    return new Promise(function (resolve, reject) {
        setTimeout(() => { 
            resolve(); // <--- remamber to call the resolve function
        }, time)
    });
}

(async function () {
    for (let i = 0; i < 5; i++) {
        await wait2Sec();
        console.log('end of loop');
    }
})();

您需要在 setInterval 回调中调用 resolve 函数。

await new Promise(resolve => { setTimeout(() => { resolve() }, 2000) });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM