async和await

async 和 await

async 修饰函数,使普通函数变为异步函数。

异步函数:返回值为Promise对象的函数就是异步函数。

异步函数的函数体可使用await关键字,await后接一个Promise对象(如果后接一个普通对象await就会失效)。

async函数执行时,在遇到(有效)await关键字后,会立即返回。

async function fn1() {
    console.log(1)
    await new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log(2)
            resolve()
        }, 1000)
    })
    console.log(3)
}

fn1()
console.log(4)
// 1
// 4
// 2
// 3

异步函数的对内的表现是同步,对外的表现是异步

此外,await还可以把promise对象的值解析出来。

async function fn1() {
    console.log(1)
    await new Promise((resolve, reject) => {
        // setTimeout(() => {
        //     console.log(2)
        //     resolve()
        // }, 3000)
        console.log(2)
        resolve()
    })
    console.log(3)
}

fn1()
console.log(4)
// 1,2,4,3

其实真正的步骤应该是await等Promise对象内部执行完才返回,上面的本质是下面这段代码:

await new Promise(() => {
    // ...
}).then(() => {
    console.log(3)
})

可以这么理解:第一个await使函数立即返回,后面的await用于提取Promise包裹的值。

posted @ 2023-08-24 09:59  银桑V_V  阅读(17)  评论(0)    收藏  举报