为什么循环中使用同步总是没有效果呢?

image.png
总是先打印9999
后打印----
我想执行完里面的接口调用然后执行打印怎么办呢?

阅读 1.4k
2 个回答

原因在于二者不是处在同一个任务队列 。9999处于主线程的当前同步代码块,await解析的Promise对象处于微任务队列。基于主线程执行完毕,才会接着由事件循环器执行当前批次微任务的事实。
要么将9999打印任务与await 任务置于同一批队列,比如于置await任务后,或置于await任务体内。要么干脆,都处于同步代码块,比如去掉 await, 但这样你需要外部手动解析Promise对象。

forEach 改成 for 循环,例如

async  function fn(){
    for(i=0;i<3;i++){
        await console.log('for '+i)
    }
    console.log('end')
}
fn()//
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题