作用
在js中可以通过async关键字来快速的创建异步函数
特点
- async声明的异步函数, 它的返回值会自动包装为Promise
const promise = new Promise((resolve, reject) => {
//
resolve(10)
}).then(value => {
console.log(value); // 返回的是 10
})
等同于
async function demo() {
return 10
}
demo().then(console.log) // 返回的也是10
console.log(demo()); // 返回的是一个Promise对象
- async声明的异步函数中可以使用await来调用
await
-
调用异步函数时, 可以直接在函数前使用await关键字来对其进行调用
调用awiait, 它会等待Promise执行出结果后将结果返回, 可以通过变量来接收结果
async function demo() {
return 10
}
async function demo2() {
let num = await demo()
console.log(num);// 10
}
demo2()
注意: await并不是将异步函数改为同步函数, 只是改变了异步函数的调用方式
1.所以await不是说在哪里都能用的!
async function demo() {
return 10
}
async function demo1(num) {
return num + 10
}
(async function text() {
let num = await demo()
num = await demo1(num)
console.log(num);
})()
console.log('我不会造成阻塞'); // 先执行这一段代码
2.当我们使用了await .catch方法就不能调用了, 只能通过try-catch来处理可能的异常
async function demo() {
return 10
}
async function demo1(num) {
return num + 10
}
(async function text() {
try {
let num = await demo()
num = await demo1(num)
console.log(num);
} catch (error) {
console.log(error);
}
})()
-
await使用的位置
1. async声明的异步函数中 2. 可以在模块的外层作用域中使用await 可以在函数最外层里面直接暴露出去, 在外部可以访问的到这个函数, 前提是要把script设置成module类型