1、async
函数返回一个 Promise 对象。
2、async
函数内部return
语句返回的值,会成为then
方法回调函数的参数。
async function f() { return ‘hello world‘; } f().then(v => console.log(v)) // "hello world"
3、async
函数内部抛出错误,会导致返回的 Promise 对象变为reject
状态。抛出的错误对象会被catch
方法回调函数接收到。
4、只有async
函数内部的异步操作全部执行完,才会执行then
方法指定的回调函数。
5、await
命令后面是一个 Promise 对象。如果不是,会被转成一个立即resolve
的 Promise 对象。
async function f() { return await 123; } f().then(v => console.log(v)) // 123
await
命令后面的 Promise 对象如果变为reject
状态,则reject
的参数会被catch
方法的回调函数接收到。
6、只要一个await
语句后面的 Promise 变为reject
,那么整个async
函数都会中断执行。
- 如果希望不要中断,可以将await放在try...catch结构里面。
- 另一种方法是
await
后面的 Promise 对象再跟一个catch
方法,处理前面可能出现的错误。
7、使用注意点:
- 最好把
await
命令放在try...catch
代码块中 - 多个
await
命令后面的异步操作,如果不存在继发关系,最好让它们同时触发 await
命令只能用在async
函数之中,如果用在普通函数,就会报错。- 如果希望多个请求并发执行,可以使用
Promise.all
方法。 - 目前,
esm
模块加载器支持顶层await
,即await
命令可以不放在 async 函数里面,直接使用。必须使用esm
加载器,才会生效。
原文地址:https://www.cnblogs.com/adhehe/p/9682774.html
时间: 2024-11-06 07:13:02