您的位置:首页 > Web前端 > JavaScript

关于JavaScript 的 Async/Await

2018-04-03 11:39 691 查看
在了解本题之前,相信我们一定知道
callback
Promise
了,若不了解建议先去了解这两项。

下面我们来看看什么是
Async/Await
?


Async - 定义异步函数(async function someName(){...})


自动把函数转换为
Promise


当调用异步函数时,函数返回值会被 resolve 处理

异步函数内部可以使用
await


Await - 暂停异步函数的执行 (var result = await someAsyncCall();)

当使用在
Promise
前面时,
await
等待
Promise
完成,并返回
Promise
的结果

await
只能和
Promise
一起使用,不能和
callback
一起使用

await
只能用在
async
函数中

Async/Await
是否会取代
Promise


不会。

Async/Await
底层依然使用了
Promise


多个异步函数同时执行时,需要借助
Promise.all


async function getABC() {
let A = await getValueA(); // getValueA 花费 2 秒
let B = await getValueB(); // getValueA 花费 4 秒
let C = await getValueC(); // getValueA 花费 3 秒

return A*B*C;
}


每次遇到
await
关键字时,
Promise
都会停下在,一直到运行结束,所以总共花费是 2+4+3 = 9 秒。
await
把异步变成了同步


async function getABC() {
// Promise.all() 允许同时执行所有的异步函数
let results = await Promise.all([ getValueA, getValueB, getValueC ]);

return results.reduce((total,value) => total * value);
}


函数总耗时为 4 秒(
getValueB
的耗时)。

Async/Await
的错误处理


在 Async/Await 语法中,我们可以使用 try/catch 进行错误处理。在 Promise 中的 .catch() 分支会进入 catch 语句。

原文来自:https://cnodejs.org/topic/59f98fadb25adcba6676868a
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Async Await js