【ES6】async

async就是Generator函数的语法糖

将 Generator 函数的星号(*)替换成async,将yield替换成await

const gen = function* () {
  const f1 = yield readFile(‘/etc/fstab‘);
  const f2 = yield readFile(‘/etc/shells‘);
  console.log(f1.toString());
  console.log(f2.toString());
};

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

改进体现以下四点:

  1. 内置执行器。async函数的执行,与普通函数一模一样,只要一行。

    asyncReadFile(); 
  2. 更好的语义。
  3. 更广的适用性。co模块约定,yield命令后面只能是 Thunk 函数或 Promise 对象,而async函数的await命令后面,可以是 Promise 对象和原始类型的值(数值、字符串和布尔值,但这时会自动转成立即 resolved 的 Promise 对象)。
  4. 返回值是 Promise。async函数的返回值是 Promise 对象,这比 Generator 函数的返回值是 Iterator 对象方便多了。你可以用then方法指定下一步的操作。

基本用法

async函数返回一个 Promise 对象,可以使用then方法添加回调函数。当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。

async function getStockPriceByName(name) {
  const symbol = await getStockSymbol(name);
  const stockPrice = await getStockPrice(symbol);
  return stockPrice;
}

getStockPriceByName(‘goog‘).then(function (result) {
  console.log(result);
});

async函数内部return语句返回的值,会成为then方法回调函数的参数

参考:http://es6.ruanyifeng.com/#docs/async#%E8%AF%AD%E6%B3%95

原文地址:https://www.cnblogs.com/Mijiujs/p/12290079.html

时间: 2024-10-03 06:07:07

【ES6】async的相关文章

【ES6】更易于继承的类语法

和其它面向对象编程语言一样,ES6 正式定义了 class 类以及 extend 继承语法糖,并且支持静态.派生.抽象.迭代.单例等,而且根据 ES6 的新特性衍生出很多有趣的用法. 一.类的基本定义 基本所有面向对象的语言都支持类的封装与继承,那什么是类? 类是面向对象程序设计的基础,包含数据封装.数据操作以及传递消息的函数.类的实例称为对象. ES5 之前通过函数来模拟类的实现如下: // 构造函数 function Person(name) { this.name = name; } //

【ES6】---JavaScript(一)

一.新增数据类型Symbol 概念: Symbol代表独一无二的 Symbol类型的值通过Symbol函数来生成,同时Symbol函数返回的值是唯一的 Symbol函数可以接收字符串作为参数,但是即使相同参数返回的值也是唯一的 作用: 属性私有化 数据保护 没有参数的情况 var s1 = Symbol(); var s2 = Symbol(); s1 === s2 // false 有参数的情况 var s1 = Symbol("foo"); var s2 = Symbol(&quo

【es6】js原生的promise

JavaScript 是单线程的,这意味着任何两句代码都不能同时运行,它们得一个接一个来.在浏览器中,JavaScript 和其他任务共享一个线程,不同的浏览器略有差异,但大体上这些和 JavaScript 共享线程的任务包括重绘.更新样式.用户交互等,所有这些任务操作都会阻塞其他任务. 一.事件的不足 对于那些执行时间很长,并且长时间占用线程的代码,我们通常使用异步来执行,但是又如何判断其是否执行完毕或者失败呢?我们通常使用事件监听,但事件监听只能监听绑定之后发生的事件,但有可能你写绑定事件代

【转载】async & await 的前世今生(Updated)

async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们编程埋下了一些隐患,有时候可能会产生一些我们自己都不知道怎么产生的Bug,特别是如果连线程基础没有理解的情况下,更不知道如何去处理了.那今天我们就来好好看看这两兄弟和他们的叔叔(Task)爷爷(Thread)们到底有什么区别和特点,本文将会对Thread 到 Task 再到 .NET 4.5的 async和 awa

【ES6】最常用的es6特性(二)

1.for of 值遍历 for in 循环用于遍历数组,类数组或对象,ES6中新引入的for of循环功能相似,不同的是每次循环它提供的不是序号而是值. var someArray = [ "a", "b", "c" ]; for (v of someArray) { console.log(v);//输出 a,b,c } 2.iterator, generator基本概念 2.1 iterator:它是这么一个对象,拥有一个next方法,这个

【ES6】最常用的es6特性(一)

参考链接: http://www.jianshu.com/p/ebfeb687eb70 http://www.cnblogs.com/Wayou/p/es6_new_features.html 1.let, const 这两个的用途与var类似,都是用来声明变量的,但在实际运用中他俩都有各自的特殊用途. 1.1第一种场景就是你现在看到的内层变量覆盖外层变量 var name = 'zach' while (true) { var name = 'obama' console.log(name)

【转】async & await 的前世今生

async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们编程埋下了一些隐患,有时候可能会产生一些我们自己都不知道怎么产生的Bug,特别是如果连线程基础没有理解的情况下,更不知道如何去处理了.那今天我们就来好好看看这两兄弟和他们的叔叔(Task)爷爷(Thread)们到底有什么区别和特点,本文将会对Thread 到 Task 再到 .NET 4.5的 async和 awa

【ES6】includes(), startsWith(), endsWith()

includes():返回布尔值,表示是否找到了参数字符串. startsWith():返回布尔值,表示参数字符串是否在原字符串的头部. endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部. 支持第二个参数,表示开始搜索的位置. 原链接:http://es6.ruanyifeng.com/#docs/string#includes-startsWith-endsWith

【ES6】对象的新功能与解构赋值

ES6 通过字面量语法扩展.新增方法.改进原型等多种方式加强对象的使用,并通过解构简化对象的数据提取过程. 一.字面量语法扩展 在 ES6 模式下使用字面量创建对象更加简洁,对于对象属性来说,属性初始值可以简写,并可以使用可计算的属性名称.对象方法的定义消除了冒号和 function 关键字,示例如下: // Demo1 var value = "name", age = 18 var person = { age, // age: age ['my' + value]: 'Jenny