码迷,mamicode.com
首页 > 其他好文 > 详细

ES6 - anync

时间:2021-02-08 12:36:23      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:dde   UNC   tool   span   OLE   button   rgba   类型   turn   

1.含义

async函数简洁点说就是Generator函数的语法糖。

示例:一个读取文件的异步操作,逐步执行,使用Generator函数执行

 1     const fs = require(‘fs‘)
 2 
 3     const readFile = function (fileName) {
 4         return new Promise(function (resolve, reject) {
 5             fs.readFile(fileName, function (error, data) {
 6                 if (error) return reject(error);
 7                 resolve(data);
 8             });
 9         })
10     }
11 
12     const gen = function* (){
13         const f1 = yield readFile(‘./a‘)
14         const f2 = yield readFile(‘./b‘)
15         console.log("文件读取结束");
16     }

 使用async函数执行

1     const gen = async function (){
2         const f1 = await readFile(‘./a‘)
3         const f2 = await readFile(‘./b‘)
4         console.log("文件读取结束");
5     }

 

可以看到,async函数就是将Generate函数的星号(*)替换成async,将yield替换为await而已。

async函数对Generator函数的改进体现在以下四点:

  • 内置执行器:async函数的执行,与普通函数一模一样,只要一行
    • asyncReadFile();

       上面代码调用了asyncReadFile函数,然后就会自动执行,输出最后结果。

  • 更好的语义:
    • async表示函数里有异步操作,await表示紧跟在后面的表达式需要等待结果。
  • 更广的适用性:
    • Generator 函数的执行必须靠执行器,所以才有了co模块。
    • co模块约定,yield命令后面只能是 Thunk 函数或 Promise 对象,而async函数的await命令后面,可以是 Promise 对象和原始类型的值(数值、字符串和布尔值,但这时会自动转成立即 resolved 的 Promise 对象)
  • 返回值是Promise
  • async函数的返回值是Promise对象(Generator函数返回值是Iterator对象)。可以使用then方法指定下一步操作。

2.基本用法

 

 

 

 

 

 

 

ES6 - anync

标签:dde   UNC   tool   span   OLE   button   rgba   类型   turn   

原文地址:https://www.cnblogs.com/codexlx/p/14386314.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!