问答

await如何并行执行?

作者:admin 2021-09-27 我要评论

问题:先统一生成promise实例后,为哈就能同步执行了 function getName () { return new Promise((resolve, reject)={ setTimeout(()={ resolve('tony') }, 2000...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

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

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

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

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

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • await如何并行执行?

    await如何并行执行?

  • 求大佬给PHP身份证验证正则

    求大佬给PHP身份证验证正则

  • axios的封装代码如何添加单独的headers

    axios的封装代码如何添加单独的headers

  • MP3播放解析错误,加密

    MP3播放解析错误,加密

腾讯云代理商
海外云服务器