为什么使用async和await后无效?

我想要的结果是在for循环时按顺序执行每个test 然后输出0 1 2 3和对应的时间
但结果是乱的 所以加不加这个async和await结果都一样 那么为什么我加了await无效呢?第二次for循环时没有等待第一次test执行完再执行第二次循环吗?还是我async和await的用法不对呢?如果我想保证执行顺序应该怎么办呢?

function test(i){
    var time = parseInt(1000*Math.random())
    setTimeout(()=>{
        console.log(i)
        console.log(time)
    },time)
}
async function test2 () {
    for (let i=0;i<4;i++){
        await test (i)
    }
}
test2()

图片描述

阅读 18.6k
3 个回答

await 后面要等 Promise 对象,但实际你等的是啥呢?把 await 那句话改一下:

const whatWaitFor = test(i);
console.log("wating", whatWaitFor);
await whatWaitFor;

clipboard.png

好吧,换句话说,你得让 test() 返回 Promise 对象,这个 Promise 对象在 setTimeout 到期时调用 resolve()

function test(i) {
    return new Promise(resolve => {
        let time = parseInt(1000 * Math.random())
        setTimeout(() => {
            console.log(i)
            console.log(time)
            resolve();
        }, time)
    })
}

clipboard.png

await的函数需要返回一个Promiseresolve被触发时代表本次异步过程结束

test里也加 async await

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题