为什么会出现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函数的更多相关文章

  1. JS异步操作新体验之 async函数

    1.初识 async 函数   ES6中提供了两个很好的解决异步操作的方案 Promise 和 Generator,ES2017标准中引入的 async 函数就是建立在 Promise 和 Gener ...

  2. async 函数学习笔记

    async函数就是Generator函数的语法糖. var fs = require('fs'); var readFile = function (fileName) { return new Pr ...

  3. C# 5.0 Async函数的提示和技巧

    一.创建Async函数 Async是C# 5.0中新增的关键字,通过语法糖的形式简化异步编程,它有如下三种方式: async Task<T> MyReturningMethod { ret ...

  4. async 函数

    同步 console.log(1); console.log(2); console.log(3); console.log(4); //异步 ajax 文件读取io操作 console.log(1) ...

  5. ECMAScript 6 学习(二)async函数

     1.什么是async函数 2.用法 2.1基本用法 3.语法 3.1返回promise对象 3.2promise状态的变化 3.3await命令 1.什么是async函数 async函数也是异步编程 ...

  6. ES2017中的async函数

    前面的话 ES2017标准引入了 async 函数,使得异步操作变得更加方便.本文将详细介绍async函数 概述 async 函数是 Generator 函数的语法糖 使用Generator 函数,依 ...

  7. async函数解析

    转载请注明出处:async函数解析 async函数是基于Generator函数实现的,也就是说是Generator函数的语法糖.在之前的文章有介绍过Generator函数语法和异步应用,如果对其不了解 ...

  8. 如何更好的编写async函数

    2018年已经到了5月份,node的4.x版本也已经停止了维护 我司的某个服务也已经切到了8.x,目前正在做koa2.x的迁移 将之前的generator全部替换为async 但是,在替换的过程中,发 ...

  9. es6学习笔记-async函数

    1 前情摘要 前段时间时间进行项目开发,需求安排不是很合理,导致一直高强度的加班工作,这一个月不是常说的996,简直是936,还好熬过来了.在此期间不是刚学会了es6的promise,在项目有用到pr ...

随机推荐

  1. 如何获知PHP程序占用多少内存(复制)

    想要知道编写的 PHP 脚本需要占用多少内存么?很简单,直接使用 PHP 查看当前分配给 PHP 脚本的内存的函数 memory_get_usage() 就可以了 下面是使用示例: 复制代码 代码如下 ...

  2. python xpath 中的全部用法

    不好意思 ,太仓促只能给你们个url 链接:https://blog.csdn.net/hhtnan/article/details/77509549

  3. Miller_Rabbin大素数测试

    伪素数: 如果存在和n互素的正整数a满足a^(n-1)≡1(mod n),则n是基于a的伪素数. 是伪素数但不是素数的个数是非常非常少的,所以如果一个数是伪素数,那么他几乎是素数. Miller_Ra ...

  4. TOSCA自动化测试工具--识别元素唯一性的控件

    当Modules模块通过Scan识别出页面元素后,选择需要测试的对象,然后判断对象唯一性

  5. maven 介绍(二)

    本文内容主要摘自:http://www.konghao.org/index 内部视频 三.仓库 仓库:本地仓库:远程仓库:私有仓库(nexus) 1. nexus 的安装: 1). 下载并且解压缩 2 ...

  6. Appium移动自动化

    一. 安装node.js 因为Appium是使用nodejs实现的,所以node是解释器,首先需要确认安装好 官网下载node.js:https://nodejs.org/en/download/ 安 ...

  7. 关于Task的认识

    首先来说说 Task.Factory.StartNew这种方式来创建Task,这里的WaitAll()指的是等待所有Task执行完成,并且里面的Task参数(t1,t2)是异步的,先以匿名委托方式 s ...

  8. 20145302张薇《Java程序设计》第四周学习总结

    20145302 <Java程序设计>第四周学习总结 教材学习内容总结 第六章 继承共同行为 面向对象中,子类继承父类,避免重复的行为定义,不过并非为了避免重复定义行为就使用继承. 程序代 ...

  9. 20144303 《Java程序设计》第一次实验实验报告

    20144303 <Java程序设计>第一次实验实验报告 北京电子科技学院(besti)实验报告 课程:java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.08 ...

  10. linux下nano中复制粘贴剪切的快捷键是什么

    答: 1.复制:alt+6 2.剪切:ctrl+k 3.粘贴:ctrl+u 4.自由剪切: ctrl+6指定起始剪切位置,按上下左右键来选中内容,然后按下ctrl+k即可自由剪切 5.撤销: alt+ ...