await如何并行执行?

问题:先统一生成promise实例后,为哈就能同步执行了

function getName () {
    return new Promise((resolve, reject)=>{
        setTimeout(()=>{
            resolve('tony')
        }, 2000)
    })
}
function getId () {
    return new Promise((resolve, reject)=>{
        setTimeout(()=>{
            resolve('123')
        }, 3000)
    })
}

(async ()=>{
    let name = await getName(); // 需要2s
    let id = await getId(); // 等待getName()执行后才能执行,执行需要3s
    alert(`name:${name}, id:${id}`); // 大概5秒
})();


(async ()=>{
        // 先 生成promise实例,下面两个行代码同步执行,无需等待
    let namePromise = getName();
    let idPromise = getId();
    // 为啥下面就能同步执行了
    let name = await namePromise;
    let id = await idPromise;
    alert(`name:${name}, id:${id}`); // 大概3秒
})()
阅读 3.2k
1 个回答

因为下面两句话异步操作已经开始执行,所以之后的await无法将二者同步。

    let namePromise = getName();
    let idPromise = getId();

new Promise的时候异步操作就会开始执行,所以是否有同步等待,要看上一个await在new Promise之前还是之后,如果上一个await在new Promise之前,那么new Promise内部的异步操作就会在上一个异步操作后才会执行,如果是在之后,那么异步操作早就启动执行。

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