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()); };
改进体现以下四点:
- 内置执行器。
async
函数的执行,与普通函数一模一样,只要一行。asyncReadFile();
- 更好的语义。
- 更广的适用性。
co
模块约定,yield
命令后面只能是 Thunk 函数或 Promise 对象,而async
函数的await
命令后面,可以是 Promise 对象和原始类型的值(数值、字符串和布尔值,但这时会自动转成立即 resolved 的 Promise 对象)。 - 返回值是 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