美文网首页
异步的那些事(四)--async await

异步的那些事(四)--async await

作者: 平凡的lily | 来源:发表于2018-08-20 16:06 被阅读0次

    async await不存在ES6中,存在于ES7的提案中,但是由于浏览器和编译工具的支持,现在用的也比较广泛,而且它也是基于Promise,并没有和Promise冲突,可以算Promise的一个补充。

    在Promise的异步解决方案中,我们可以看出callback的形式依然存在,只是可以做到它不再嵌套,可以拆分串行。而async await的写法更加趋近与同步(永远改变不了JS单线程、异步的本质,只是封装出更加同步的写法)。它的用法需要注意以下三点:

    使用await,函数必须用async标识;

    await后面跟的是一个Promise实例;

    需要babel-polyfill;

    下面附上一个例子如下,因为这个chrome浏览器还没有支持,所以这次不能直接在浏览器中直接贴代码运行,下面直接贴出代码:

    而且async await的方法很好的解决了Promise链中共享变量的问题。


    觉得以前对es6中async没有理解透彻,今天结合阮老师的es6一书重新理解,“async 函数返回一个Promise对象,可以使用then方法添加回调函数”。例子如下

    上面的这个是一个返回状态是resolved的Promise,如果函数后面不跟.then,指定回调函数,则async函数与普通函数无异。上面的async函数转换普通函数如:

    “当函数执行的时候,一旦遇到await就先返回,等到异步操作完成,再接着执行函数体后面的的语句”。表明遇到await的话将遇到阻塞,等待await后面的异步操作完成,再执行函数体里面后面的语句。

    async2函数中有Promise,但是没有await,打印出的第一个Promise是result的结果,后面的Promise是async函数的返回(由第一句话可知),下面的例子是加上await,

    从上图运行结果可知,await关键字阻塞了代码运行,同时result的结果不再是Promise,而是Promise对象的结果,这里就是‘3333’。await后面不是Promise对象,就直接返回对应的值。

    相关文章

      网友评论

          本文标题:异步的那些事(四)--async await

          本文链接:https://www.haomeiwen.com/subject/vtxwbftx.html