Async/await的主要益处是可以避免回调地狱(callback hell)问题

Chromium JavaScript引擎 从v5.5开始支持async/await功能,Chromium JavaScript引擎版本号的查看方法是:在浏览器地址栏输入 chrome://version,查询出来的信息如下图所示:

这意味着async/await不再是实验性功能,使用它时无需指定--harmony参数,此参数用来开启那些几乎已完成但被V8团队认为还不稳定的功能。不同的node版本使用不同的V8引擎,查看方式是:

Node.js 7.6正式默认支持async/await功能

async-await语法介绍

在函数,匿名函数,箭头函数,变量,类中加上关键字async就行了

async function asyncFunc() {}

const asyncFunc = async function() {}

async function() {}

async () => {}

class someClass {
async asyncFunc() {}
}

function前面加上async关键字,表示该function需要执行异步代码。 async function函数体内可以使用await关键字,且await关键字只能出现在async function函数体内。

await关键字可以跟在任意变量或者表达式之前,await后面通常会跟一个异步过程,如下

async function asyncFunc() {
await somePromise;
}

async function的返回值

async function固定会返回一个promise,即便函数体里面没有调用return。由于async function返回一个promise,所以可以写在await后面,类似这样

async function asyncFun1() {}
async function asyncFun2() {
await asyncFun1();
}
async function asyncFun3() {
await asyncFun2();
}
asyncFun3(); 等效于:
async function asyncFun1() {}
async function asyncFun2() {}
async function asyncFun3() {
await asyncFun1();
await asyncFun2();
}
asyncFun3();

如果有return,return后面的值都会被包装成一个promise执行正确的回调函数,所以return 'foo'会被包装成return Promise.resolve('foo')。

React中使用jQuery $.ajax Promise避免回调地狱的语法

componentDidMount() {
const self = this;
// 获取用户名
$.ajax('get_my_name')
.then(name => {
// 根据用户名获取个人信息
// 链式Promise
return $.ajax(`get_my_info_by_name'?name=${name}`);
}).then(function(info) {
self.setSate({info});
}).catch(function(err) => {
console.error(err);
});
}

React中使用async,await的避免回调地狱的语法

async componentDidMount() {
try {
// 获取用户名
const name = await $.ajax('get_my_name');
// 根据用户名获取个人信息
const info = await $.ajax(`get_my_info_by_name'?name=${name}`);
this.setSate({info});
} catch(err) {
console.error(err);
}
}

可以看出,async,await的写法更优雅

参考文章

[1]7.6默认支持Async/Await

[2] Hey async,await me

[3] 如何在浏览器使用 async/await

ES8 async/await语法的更多相关文章

  1. Python PEP 492 中文翻译——协程与async/await语法

    原文标题:PEP 0492 -- Coroutines with async and await syntax 原文链接:https://www.python.org/dev/peps/pep-049 ...

  2. ReactNative踩坑日志——使用async/await语法解决网络请求的异步导致的指令执行顺序错乱问题

    转载请注明原文地址: ReactNative的fetch是天然的异步请求,因此,如果你在一个代码块中使用了fetch,那么在执行的时候程序不会等待网络响应结束才执行下一条代码,而是会直接按顺序执行完整 ...

  3. C#Framework4.0支持异步async/await语法

    由于用户使用的是XP系统,但是程序里异步都是通过async/await代码来实现的,然而async/await需要Framework4.5版本才可以,而XP系统最高只能支持到Framework4.0, ...

  4. 重新认识 async/await 语法糖

    提起.Net中的 async/await,相信很多.neter 第一反应都会是异步编程,其本质是语法糖,但继续追查下去,既然是语法糖,那么经过编译之后,真正的代码是什么样的,如何执行的?带着这些疑问, ...

  5. 抓住异步编程async/await语法糖的牛鼻子: SynchronizationContext

    长话短说,本文带大家抓住异步编程async/await语法糖的牛鼻子: SynchronizationContext 引言 C#异步编程语法糖async/await,使开发者很容易就能编写异步代码. ...

  6. python3.6以上 asyncio模块的异步编程模型 async await语法

    这是python3.6以上版本的用法,本例是python3.7.2编写使用asyncio模块的异步编程模型,生产这消费者,异步生产,用sleep来代替IO等待使用async和await语法来进行描述a ...

  7. Async/await语法糖实现(Generator)

    // generator也是一种迭代器(Iterator) 有next方法,并返回一个对象{value:...,done:...} function run(generatorFunction) { ...

  8. 让webpack打包支持ES7的async/await语法

    npm install --save-dev babel-plugin-transform-runtime npm install --save babel-runtime .babelrc配置 { ...

  9. Async/Await替代Promise的6个理由

    译者按: Node.js的异步编程方式有效提高了应用性能:然而回调地狱却让人望而生畏,Promise让我们告别回调函数,写出更优雅的异步代码:在实践过程中,却发现Promise并不完美:技术进步是无止 ...

随机推荐

  1. 论文阅读笔记(一)FCN

    本文先对FCN的会议论文进行了粗略的翻译,使读者能够对论文的结构有个大概的了解(包括解决的问题是什么,提出了哪些方案,得到了什么结果).然后,给出了几篇博文的连接,对文中未铺开解释的或不易理解的内容作 ...

  2. ddt源码修改:HtmlTestRunner报告依据接口名显示用例名字

    背景是这样的: 自己写了一套接口自动化的框架,其中使用unittest + ddt + excel作为数据驱动模式的应用,使用HtmlTetstRunner来生成测试用例. 一切看起来很完美. 但是, ...

  3. Pytorch学习笔记(二)---- 神经网络搭建

    记录如何用Pytorch搭建LeNet-5,大体步骤包括:网络的搭建->前向传播->定义Loss和Optimizer->训练 # -*- coding: utf-8 -*- # Al ...

  4. 安装YApi 接口管理平台

    yum install mongodb yum install -y nodejs git clone https://gitee.com/mirrors/YApi.git 克隆项目到本地 使用命令进 ...

  5. Gitlab_ansible_jenkins三剑客③Ansible的安装及使用

    一台服务器可能会安装不同的python应用,不同的应用可能使用的模块版本不同,如果都安装在同样的环境下容易冲突,为了避免冲突,引入virtualenv 这个包管理工具进行环境的隔离 使用pip安装之前 ...

  6. MySQL 的安装与使用(一)

    一.Windows 上安装 MySQL 1.Windows 上安装 MySQL 相对来说会较为简单,地那就链接 https://cdn.mysql.com//Downloads/MySQL-8.0/m ...

  7. c博客作业--分支、顺序结构

    1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 对于本章学习我感觉对代码有了初步的了解,一些简单的题目可以熟练掌握,但现在解决一道题目花的时间过多,不易发现那 ...

  8. 2-1、FileBeat入门

    FileBeat入门 要开始使用Filebeat设置,请安装并配置相关产品: 用于存储和索引数据的Elasticsearch. 用户界面的Kibana. 用于解析和增强数据的Logstash(可选). ...

  9. 如何给PDF文件制作书签

    书本阅读的时候我们有时候会制作一些漂亮的书签,那么电子文档也是有书签的,要怎么制作小伙伴们都知道吗?应该会有许多的小伙伴还不知道,今天就为大家分享一下电子文件如何添加书签的.就以PDF这个现在常用的电 ...

  10. Shell常用快捷键

    编辑命令 ctr+u 删除光标到行首(unix-line-discard) ctrl+k 删除此处至末尾(kill-line) ctr+e 光标移到末尾(end) ctr+a 光标移到行首(ahead ...