zoukankan      html  css  js  c++  java
  • 初识async函数

    为什么会出现async函数

    首先从大的方面来说,出现async函数时为了解决JS编程中的异步操作,再往具体说就是为了对以往异步编程方法的一种改进,也有人说仅仅只是Generator 函数的语法糖,这个我暂时还没理解到那个程度,因为我对Generator还是一知半解,等理解透一些了会专门写篇文章记录一下的。回到async函数,它算是阶段性的解决了异步编程的问题,也就是说让我们无限接近了异步编程的最高境界,就是不用关心它是不是异步,一切都是同步编程的写法,那样可读性就很强了。

    什么是async函数

    async函数是ES2017标准新引入的,使得异步操作变得更加方便。例如在nodejs中使用async函数读取两个文件,可以这样

    const fs = require('fs');
    const asyncReadFile = async function () {
      const f1 = await readFile('/etc/fstab');
      const f2 = await readFile('/etc/shells');
      console.log(f1.toString());
      console.log(f2.toString());
    };
    
    

    async函数实际上就是对Generator函数的改进,体现在以下四点。

    • 内置执行器
      • 也就是说async函数可以像普通函数那样一行直接执行
    • 更好的语义
      • 这个基本上来说就是async里面包的是异步操作,而await得到的就是异步操作的结果
    • 返回值是 Promise
      • async函数的返回值是 Promise 对象,这比 Generator 函数的返回值是 Iterator 对象方便多了。你可以用then方法指定下一步的操作。

    简单用法和使用感受

    • 简单用法
      • async函数里面包含的一个异步操作,而异步操作结果则由await接收,这个返回值是一个promise对象,所以就有可能成功或者失败,所以最好是做一些错误处理,一般使用try..catch
      async function myFunction() {
      try {
        await somethingThatReturnsAPromise();
      } catch (err) {
        console.log(err);
      }
      }
      
      • 还有一点,await 命令只能用在 async 函数之中,如果用在普通函数,就会报错。
      • 如果确实希望多个请求并发执行,可以使用 Promise.all 方法。,这个暂时还没试过
    • 因为最近换了工作,公司技术栈就就大量的使用了async函数,就最近几天的使用下来,最大的感受就是代码确实更好理解了,毕竟相当于用同步的语法在写异步代码了,至于其他深入的用法还在探索中,在后续的使用中还有什么别的心得与体会还是持续更新,文中有什么理解不到位的,欢迎留言讨论!
    • 还有一点体会就是:无论是新技术还是老技术,不在实际项目中用一下的话永远只会存在自己的记忆深处!像这个async函数之前就在阮一峰老师的es6教程中看过,可是看过归看过竟然再次看到时都没什么印象了,所以新的技术还是要用的,不用光看看的话永远只是一个看客,努力实践吧,哈哈,就这样!

    参考文章:http://es6.ruanyifeng.com/#docs/async

  • 相关阅读:
    cf1131f 构造+并查集
    多源最短路小结
    bzoj2200拓扑排序+最短路+联通块
    cf478d 线性dp好题
    cf919D 线性dp+拓扑排序
    hiho1460 rmq模板题
    最小标示法模板 poj1509
    JAVA动态代理机制分析guide
    java动态代理(JDK和cglib)
    AOP面向切面编程
  • 原文地址:https://www.cnblogs.com/wancheng7/p/8590212.html
Copyright © 2011-2022 走看看