gpt4 book ai didi

JavaScript:forEach 循环中的奇怪行为

转载 作者:搜寻专家 更新时间:2023-11-01 00:36:29 25 4
gpt4 key购买 nike

我的代码是这样的:

someArray.forEach(x => {
// do something
console.log(‘calling api for ‘ + x);
callAnHttpApiAsync(...);
sleep(10);
});

http api 调用是异步的(但我不使用任何 await/async 语法)并在 api 发回响应后记录一些内容。发生的事情是 forEach 循环已完成,我开始看到仅在此之后记录的响应。我希望在循环结束之前看到一些响应(我尝试增加 sleep 时间),但无论我等待多长时间或循环多长时间,响应总是在循环结束后记录下来。我使用 Node 的 sleep 库。我看到这样的东西:

calling api for 1
calling api for 2
calling api for 3
...
calling api for 10000
got response for 1
got response for 2
got response for 3
...
got response for 10000

我已经通过使用 for-of 和 await/async 解决了这个问题(如果您有更好的想法请告诉我),但我无法理解这种奇怪行为的原因。为什么我只在完整循环后才得到响应?有任何想法吗?抱歉格式问题,但我在移动设备上。

最佳答案

完全披露:我不太了解 node.js,只了解客户端 javascript,但我认为这里的解释也适用。

问题的症结在于“异步”并不意味着“并行”。当您调用异步操作时,它会被放入队列中。当 JSVM 执行完当前正在运行的代码(在本例中是包含 forEach 的代码)时,然后并且只有在那时它才会获取异步队列中的第一个操作并执行它;然后,当它完成时,它会运行下一个,依此类推。 IE。无论您启动多少个异步作业,一次只会运行一个作业。

关于JavaScript:forEach 循环中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49954440/

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