初识async函数

为何会出现async函数

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

什么是async函数

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

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函数的改进,体如今如下四点。shell

  • 内置执行器
    • 也就是说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编程

相关文章
相关标签/搜索