【发布时间】:2022-03-29 13:53:21
【问题描述】:
我在 Nodejs 上运行此代码,我预计会出现错误,但它确实有效!
如果我将 2500 毫秒设置为 setTimeout 我得到一个错误,这是正常的。
有人在这里为我解释吗?
为什么我会先看到IIFE 登录?
我在浏览器上运行这段代码,结果如我所料。
const data = [{}]
const myPromise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve([1,2,3,4]);
}, 3000);
});
console.log('hiiii');
setTimeout(() => {
data[0].map(e => console.log('to ',e))
}, 2999);
(async() => {
data[0] = await myPromise
data[0].map(e => console.log('iife ',e))
}
)()
console.log('byeeeee')
下面的代码是我在控制台上看到的
hiiii
byeeeee
iife 1
iife 2
iife 3
iife 4
to 1
to 2
to 3
to 4
【问题讨论】:
-
错误是什么?
-
旁注:不要使用
.map()来迭代集合。这就是.forEach()的用途。 -
它应该抛出一个错误,说 data[0].map 不是一个函数,因为 data[0] 是一个对象
-
我的主要问题是关于事件循环以及如何迭代对象!
-
@Ivar - 我想说不要将
.forEach()用作常规的for/of循环,它可以为您提供更多的灵活性,并且不会一直创建额外的函数范围。
标签: javascript node.js asynchronous promise event-loop