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

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

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

湖上湖 2019-01-04 22:15:11
题目描述需要像同步执行那样,按照理想的顺序打印题目来源及自己的思路这是一个实际需求简化后的问题相关代码// 请把代码文本粘贴到下方(请勿用图片代替代码)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
查看完整描述

1 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

如果只是间隔1秒,那么这么做就行

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

然而这没有解决同步的问题,代码并不是等上一个执行完了才执行的.你需要的可能是async/await

async function print(msg) {    return new Promise((resolve, reject) => {
        setTimeout(resolve, 1000, msg)
    })
}async function main() {    for (let i = 0; i < 10; i++) {        console.log(await print("外部" + i));        for (let j = 0; j < 5; j++) {            console.log(await print("内部" + j))
        }
    }
}

main()

这样其实可以,这个Promise+await有点绕,熟悉了才能灵活点运用


查看完整回答
反对 回复 2019-01-04
  • 1 回答
  • 0 关注
  • 1700 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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