gpt4 book ai didi

javascript - forEach 中的异步函数在之前的 const 声明时执行

转载 作者:行者123 更新时间:2023-11-30 11:18:02 24 4
gpt4 key购买 nike

我有一个我无法解释的奇怪的 javascript 行为。当我运行时

const waitFor = (ms) => new Promise(r => setTimeout(r, ms))

// const o = 2;

[1, 2, 3].forEach(async (num) => {
await waitFor(50);
console.log(num);
});

console.log('Done');

它只记录完成。这是预期的,因为 forEach 无法获得异步回调。

但是,如果您取消注释行 const o = 2(未使用 o),它会记录

Done
1
2
3

你能解释一下为什么吗?

最佳答案

第一行少了一个分号。如果没有分号,代码将被解析为:

const waitFor = (ms) => new Promise(r => setTimeout(r, ms))[1,2,3].forEach( ... )

如果你这样做,你可以验证它:

console.log(waitFor);

它打印出完整的代码,而不仅仅是第一行:

(ms) => new Promise(r => setTimeout(r, ms))

// const o = 2;

[1, 2, 3].forEach(async (num) => {
await waitFor(50);
window.runnerWindow.proxyConsole.log(num);
})

数组声明和 forEach 循环包含在 lambda 中并且永远不会运行。

如果您尝试启动 lambda,例如使用 waitFor(6),代码将失败 - 我们可以看到这里的逗号被解析为 comma operator :

TypeError: (new Promise(...))[3] is undefined

关于javascript - forEach 中的异步函数在之前的 const 声明时执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50836426/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com