await如何并行执行?

发布于 2022-09-12 01:08:21 字数 780 浏览 30 评论 0

问题:先统一生成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秒
})()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧城空念 2022-09-19 01:08:21

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

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文