异步与概述 async/await
概述
异步
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
tl;drasync/await是处理异步行为的好方法,一旦你掌握了它的语法,就会发现它比其他方法更直观。<Promise>.then()
概述
合成糖?!
没错,你没听错。Promise 是对回调函数的抽象。如果你不了解回调函数也没关系,我建议你以后多了解一下。async/await 则是处理 Promise 并实现特定行为的语法。
只有同步收益吗?不。
其中一种行为是准同步执行调用。如果您需要先获取某些数据再获取其他数据,这将非常有用。但是,如果不需要按顺序获取数据,您也可以通过将它们传递给并行处理程序来实现并行处理。Promise.all()
const data = await Promise.all([call1, call2])
Stack Overflow 上一个很棒的回答非常详尽地介绍了 Promise.all,甚至还简要地谈到了快速失败(fail fast)。
Node 12 的 async/await 比 Promise 更快……真的!
所以,async/awaitPromises 只是语法糖,因此 Promises 就一定比 . 更快、性能更高吗async/await?其实不然。如果你想深入研究这个问题,我非常欢迎,我试过了,现在头还疼呢,哈哈。
异步
承诺生成器
我不会深入细节,但async它返回的是一个 AsyncFunction。然而,如果async你声明了,并且该函数的行为更趋于同步,它现在看起来会像这样:async function Something(){}这个函数现在返回的是一个 Promise!
示例
我也喜欢用try/catch它来处理错误async/await。
async function someCall(someAPIURL) {
const data = fetch(`${someAPIURL}`, { method: "GET" });
return data;
}
let data;
try {
data = await someCall(
`https://www.googleapis.com/books/v1/volumes?q=isbn:0747532699`);
} catch(error){
data = error
}
console.log(data)