资讯专栏INFORMATION COLUMN

async/await异步不阻塞调用

TigerChain / 3157人阅读

摘要:有两个新的异步语法,一个是,,一个是,两者我更青睐于,,原因很简单,,语法糖让代码更清晰,更直观。当函数执行的时候,一旦遇到就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。

es6有两个新的异步语法,一个是async,await,一个是promise,两者我更青睐于async,await,原因很简单,async,await语法糖让代码更清晰,更直观。
简单的讲一下,async函数返回一个 Promise 对象,可以使用then方法添加回调函数。当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。那其实就是说在async函数内,每当遇到await关键字的时候,函数就是阻塞住,必须等到异步操作有结果时才会往下继续执行,思考下,我们关心的异步返回的结果,那么也就是说我们可以异步函数执行的结果储存起来,在需要的时候再去await,看下面的代码

function asyncAfun() {
    return new Promise((resolove)=>{
        setTimeout(function() {
            resolove(123);
        }, 3000);
    })    
}
function asyncBfun() {
    return new Promise((resolove)=>{
        setTimeout(function() {
            resolove(456);
        }, 3000);
    })    
}
async function test () {
    let a = asyncAfun();//不阻塞
    let b = asyncBfun();//不阻塞
    let _a = await a; //这里等待a的返回 后面可以do something
    let _b = await b;//这里等待b的返回 后面可以do something
}

那么当你需要同时并发大量请求,并且等待所有的请求结果完成的时候可以这么写

async function test () {
    let a = asyncAfun();
    let b = asyncBfun();
    let _a = await a;
    let _b = await b;
    Promise.all([_a,_b]).then(v=>{
        console.log(v)
    })
}

Promise.all的作用可以去MDN查,类似的还有Promise.race

学以致用,以上

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/101144.html

相关文章

  • 如何正确合理使用 JavaScript async/await

    摘要:想阅读更多优质文章请猛戳博客一年百来篇优质文章等着你引入的在的异步编程中是一个极好的改进。可能会产生误导一些文章将与进行了比较,并声称它是下一代异步编程风格,对此作者深表异议。结论引入的关键字无疑是对异步编程的改进。 showImg(https://segmentfault.com/img/bVbjFP0?w=800&h=450); 想阅读更多优质文章请猛戳GitHub博客,一年百来篇...

    trigkit4 评论0 收藏0
  • 理解 JavaScript 的 async/await

    摘要:因为函数返回一个对象,所以可以用于等待一个函数的返回值这也可以说是在等函数,但要清楚,它等的实际是一个返回值。帮我们干了啥作个简单的比较上面已经说明了会将其后的函数函数表达式或的返回值封装成一个对象,而会等待这个完成,并将其的结果返回出来。 随着 Node 7 的发布,越来越多的人开始研究据说是异步编程终级解决方案的 async/await。我第一次看到这组关键字并不是在 JavaSc...

    tracymac7 评论0 收藏0
  • 你真的会在async/await中捕获异常吗?

    摘要:在我的上一篇文章中写到,当使用时,如何同时捕获到回调函数和抛出的错误。而对于操作则会返回一个,我们能够轻松地通过捕获到异常不管是回调函数还是,他们都是异步的,我们的应用程序都不会因为发送而被阻塞。 原文链接:Catching without Awaiting 当执行一项需要等待一段时间才能返回的任务时,如果使用async/await,就显得比较麻烦了。如果async方法还没有得到返回值...

    baiy 评论0 收藏0
  • 深入理解async/await来处理异步

    摘要:虽然在后面,但是我先执行继续看控制台原来函数返回的是一个对象,如果要获取到返回值,我们应该用方法,继续修改代码。这就是来处理异步。 目前async/await 已经被标准化,我们需要尽快将学习进程提上日程。先说一下async的用法,它作为一个关键字放到函数前面,用于表示函数是一个异步函数,因为async就是异步的意思,异步函数也就意味着该函数的执行不会阻塞后面代码的执行。下面写一个as...

    luzhuqun 评论0 收藏0
  • 理解async/await

    摘要:所谓异步,就是调用在发出后,这个调用就直接返回了,调用者不会立即得到结果,但是不会阻塞,可以继续执行后续操作,而被调用者执行得到结果后通过状态事件来通知调用者使用回调函数来处理这个结果。另外状态的回调函数是可省略的。 首先明确一个问题,为什么 Node.js 需要异步编程? JavaScript 是单线程的,在发出一个调用时,在没有得到结果之前,该调用就不返回,意思就是调用者主动等待...

    luodongseu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<