async
async 函数总返回的是一个 Promise 对象(不论是否有 return 语句)。
-
async 函数内部的 return 语句返回的值,作为 then() 回调函数的参数。
-
async 函数内部抛出的错误,返回的 Promise 对象变为 reject 状态,错误会被 catch 捕获到。
-
只有 async 函数内部的异步操作执行完,才会执行 then 指定的回调函数。
await 只能用在 async 函数中,用在普通函数中会报错
通常情况下,await 后边是一个 Promise 对象,返回该对象的结果。如果不是 Promise 对象,直接返回对应的值。
await 后边是一个 thenable 对象(定义了 then 方法的对象),那么 await 会将其等同于 Promise 对象。
await 后边的 Promise 状态是 reject , 则 reject 的参数会作为 catch() 的回调函数的参数(即使是没有使用 return 返回 Promise)。
async function f() {
// return await new Promise((resolve, reject) => resolve(1)) // res: 1(若没有使用 return 语句返回,输出结果是 res: undefined)
await new Promise((resolve, reject) => reject('出错啦')) // err: 出错啦(即使没有使用 return 语句,错误也会被 catch 捕获到)
}
f().then(res => console.log("res:", res)).catch(err => console.log("err:", err))
- await 后边异步操作出错, 等同于 async 函数返回的 Promise 对象状态是 reject
顶层 await
允许在模块的顶层独立使用 await 命令,主要目的是使用 await 解决模块异步加载的问题。
顶层 await 只能用在 ES6 模块,不能用在 CommonJS 模块。这是因为 CommonJS 模块的 require() 是同步加载,如果有顶层 await ,就没法处理加载了。
// import() 方法加载
const strings = await import(``);
如果加载多个包含顶层 await 命令的模块,加载命令是同步执行的。
标签:ES6,return,函数,await,Promise,reject,async From: https://www.cnblogs.com/4shana/p/17865511.html