- 表示其是一个异步函数
- 返回一个
Promise
对象 - return相当于 Promise.resolve
- 无 return 则 Promise.resolve 一个 undefined)
- 报错相当于 Promise.reject
async function fn(){
return 'fn';
}
fn().then(data => {
console.log(data);
})
- 必须在 async里
- 用于等待一个异步方法的完成
- 后接表达式,如果是普通数据,则返回普通数据。如果是 promise,则返回 resolve 的数据
- 当执行中遇到 await,则这个 async 函数暂停执行,跳出函数,执行函数外的代码,同时异步执行 await后面的表达式
async function fn(){
console.log(1);
const a = await 2;
console.log(a);
}
fn();
console.log(3);
async function fun() {
throw 1
}
fun().catch(err => console.log(err))
async function fun() {
await (() => {throw 2})()
}
fun().catch(err => console.log(err))
async function fun() {
await Promise.reject(3)
}
fun().catch(err => console.log(err))
- 没有平行执行,第一个 await 执行完,才执行第二个 await
function delay() {
return new Promise(resolve => setTimeout(resolve, 1000))
}
async function run() {
const time = Date.now()
for (let i = 0; i < 3; i++) {
await delay()
}
console.log(Date.now() - time)
}
run()
function delay(index) {
return new Promise(resolve => setTimeout(() => resolve(index), 1000))
}
async function run() {
const date = Date.now()
const arr = new Array(3).fill(1).map((item, index) => delay(index))
for (const item of arr) {
const index = await item
console.log(index)
}
console.log(Date.now() - date)
}
run()