为了账号安全,请及时绑定邮箱和手机立即绑定

js for 在等待时是否阻塞?

js for 在等待时是否阻塞?

湖上湖 2022-11-11 16:40:25
const somefunction = async () => {  const arr = [...]  for(let i = 0 ; i < arr.length ; ++i){    await updater(arr[i])  }}上面的 for 循环将等待 promise 解决,然后再进行下一次迭代,但是,现在这是否是 nodejs 中主事件循环的阻塞操作?请注意:这是一个“for”而不是“forEach”循环。非常不一样。
查看完整描述

2 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

不,它没有阻塞。

asyncawait函数在执行承诺时进入睡眠状态。控制权交还给调用函数(该函数获取从async函数返回的未解决的 Promise)。

(当然,如果updater是阻塞,那么它仍然会阻塞)。


查看完整回答
反对 回复 2022-11-11
?
烙印99

TA贡献1829条经验 获得超13个赞

正如您通过运行此示例所看到的,该函数将是非阻塞的。这就是异步等待的本质。


    function asyncAction(message) {

        console.log("asyncAction start: " + message)

        return new Promise ( (res, err) => {

                                            setTimeout( () => res("done"),2000)

                                            }

        )

        console.log("asyncAction complete: " + message)

    }   


    async function asyncActions() {

        await asyncAction("1")

        console.log("1 done")

        await asyncAction("2")

        console.log("2 done")

        await asyncAction("3")              

        console.log("3 done")

    }   


    console.log("program start")

    asyncActions()

    console.log("program complete")


查看完整回答
反对 回复 2022-11-11
  • 2 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号