async函数使用方法
/ / 点击 / 阅读耗时 6 分钟参考资料
主要内容
描述了涉及async函数的主要概念,包括:
- async函数的返回值Promise对象的创建工作过程
- await操作符的作用
- async函数中return和await的区别
描述了顺序启动和并行启动的方法
- 描述了是否使用await的区别
有待补充和学习的
- async的原理
- async函数的一些复杂的使用场景
- 其他异步执行方法,promise、yield的深入理解
对async函数使用的理解
- 局限在async函数内部,利用await
- 利用async函数的返回值promise对象
async函数是如何工作的
The result of an async function is always a Promise p. That Promise is created when starting the execution of the async function.
The body is executed. Execution may finish permanently via return or throw. Or it may finish temporarily via await, in which case execution will usually continue later on.
The Promise p is returned.
When executing the body of the async function, return x resolves the Promise p with x
, while throw err rejects p with err.
await的本质
waiting for a Promsie to be settled.
if the Promise is fulfilled, the result of await is the fulfillment value(也就是说,此刻的结果是普通的值,而不是一个promsie对象, 比如下面的示例:)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
async function asyncFunc() {
const result = await otherAsyncFunc();
console.log(reuslt);
}
//上面这个函数完全等价于
function asyncFunc() {
return otherAsyncFunc()
.then(reuslt => {
console.log(result);
});
}If the promise is rejected, await throws the rejection value。这个同样有两种处理方式,一种是在async函数内部使用try…catch来解决,另一种是传到async函数外,使用catch来解决。
await后面是个常数,则会以这种形式返回返回值:
Promise.resolve(value)
async函数中的return
Resolving a Promise is a standard operation. return uses it to resolve the Promise p of an async function.
Returning a non-Promise value fulfills p with that value
Returning a Promise means that p now mirrors the state of that Promise
是否使用await
在返回语句中不使用await
1
2
3
4
5
6// 这个函数的返回值使用的是上面第二种情况
// 效率高
async function asyncFunc() {
return anotherAsyncFunc();
}在返回语句中使用await
1
2
3
4
5
6// 下面这个函数的返回语句中会发生先解包(await解包),在包装(return 会再次包装成Promise.resolve的过程)
// 效率低
async function asyncFunc() {
return await anotherAsyncFunc();
}
async函数使用的几种场景(出自上述参考资料1)
1 | var resolveAfter2Seconds = function() { |