初识async函数

Posted 西风瘦码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识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

以上是关于初识async函数的主要内容,如果未能解决你的问题,请参考以下文章

如何在async.race函数中使用async.retry

来自dispatch_async全局崩溃的C函数调用,但在主队列上工作

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题