js,多层for循环嵌套下的异步,怎样按顺序执行?

题目描述

需要像同步执行那样,按照理想的顺序打印

题目来源及自己的思路

这是一个实际需求简化后的问题

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

for (let i = 0; i < 10; i ++) {
    setTimeout(() => {        console.log(`这是外层${i}`);
    }, 1000);    for (let j = 0; j < 5; j ++) {
        setTimeout(() => {            console.log(`这是内层的${j}`);
        }, 1000);
    }
}

你期待的结果是什么?实际看到的错误信息又是什么?

希望可以像同步一样,打印出以下结果,并且每次间隔1秒

这是外层0
这是内层的0
这是内层的1
这是内层的2
这是内层的3
这是内层的4
这是外层1
这是内层的0
这是内层的1
这是内层的2
这是内层的3
这是内层的4


湖上湖
浏览 1701回答 1
1回答

慕神8447489

如果只是间隔1秒,那么这么做就行let&nbsp;time&nbsp;=&nbsp;0;for&nbsp;(let&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;10;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;time&nbsp;+=&nbsp;1000 &nbsp;&nbsp;&nbsp;&nbsp;setTimeout(()&nbsp;=>&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(`这是外层${i}`); &nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;time);&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(let&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;<&nbsp;5;&nbsp;j++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;time&nbsp;+=&nbsp;1000; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTimeout(()&nbsp;=>&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(`这是内层的${j}`); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;time); &nbsp;&nbsp;&nbsp;&nbsp;} }然而这没有解决同步的问题,代码并不是等上一个执行完了才执行的.你需要的可能是async/awaitasync&nbsp;function&nbsp;print(msg)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;Promise((resolve,&nbsp;reject)&nbsp;=>&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTimeout(resolve,&nbsp;1000,&nbsp;msg) &nbsp;&nbsp;&nbsp;&nbsp;}) }async&nbsp;function&nbsp;main()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(let&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;10;&nbsp;i++)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(await&nbsp;print("外部"&nbsp;+&nbsp;i));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(let&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;<&nbsp;5;&nbsp;j++)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(await&nbsp;print("内部"&nbsp;+&nbsp;j)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} } main()这样其实可以,这个Promise+await有点绕,熟悉了才能灵活点运用
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript