async await 使用代码详解

元气小坏坏 提交于 2019-12-28 04:47:42

小白版正确代码

async function fn() {
    function f1() {
        return new Promise((resolve, reject) => {
            setTimeout(function () {
                console.log(11111)
                resolve()
            }, 3000)
        })
    }
    function f2() {
        return new Promise((resolve, reject) => {
            setTimeout(function () {
                console.log(222222)
                resolve()
            }, 2000)
        })

    }
    function f3() {
        return new Promise((resolve, reject) => {
            setTimeout(function () {
                console.log(333333)
                resolve()
            }, 1000)
        })
    }
    await f1();
    await f2();
    await f3();
}
async function ns(){

    await fn()
    console.log(444444)
}
ns()
输出结果:

Promise {}
VM251:5 11111
VM251:13 222222
VM251:22 333333
VM251:34 444444

错误演示1

async function fn() {
function f1() {
setTimeout(function () {
console.log(11111)
}, 3000)
}
function f2() {
setTimeout(function () {
console.log(222222)
}, 2000)

    }
    function f3() {
       
            setTimeout(function () {
                console.log(333333)
            }, 1000)
    }
    await f1();
    await f2();
    await f3();
}
async function ns(){

    await fn()
    console.log(444444)
}
ns()


结果:

VM453:26 444444
Promise {: undefined}
VM453:16 333333
VM453:9 222222
VM453:4 11111

错误演示2

async function fn() {
function f1() {
setTimeout(function () {
console.log(11111)
}, 3000)
}
function f2() {
setTimeout(function () {
console.log(222222)
}, 2000)

    }
    function f3() {
       
            setTimeout(function () {
                console.log(333333)
            }, 1000)
    }
    await f1();
    await f2();
    await f3();
}
async function ns(){

    await fn()
    console.log(444444)
}
ns()


结果:

VM463:26 444444
Promise {: undefined}
VM463:16 333333
VM463:9 222222
VM463:4 11111

原理

await关键字后面跟Promise对象:在Pending状态时,相应的协程会交出控制权,进入等待状态,这是协程的本质;

await是async wait的意思: wait的是resolve(data)的消息,并把数据data返回,然后再顺序执行下面的语句。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!