美文网首页前端秘境
promise 与 async await 异步之美

promise 与 async await 异步之美

作者: 做梦跳绳闪到腰 | 来源:发表于2019-06-27 16:36 被阅读59次

    一眼看懂promiseasync await

    // promise方法
    let p1 = new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve('我是p1')
        }, 4000)
    })
    let p2 = new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve('我是p2')
        }, 200)
    })
    let p3 = new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve('我是p3')
        }, 200)
    })
    
    // 想让p1完成后再执行P2再执行P3
    // 数量太多只能循环嵌套
    p1.then((res) => {
        console.log(res);
        p2.then((res) => {
            console.log(res);
            p3.then((res) => {
                console.log(res);
            })
        })
    })
    

    asyncawait在干什么,async用于申明一个function是异步的,而await可以认为是async wait的简写,等待一个异步方法执行完成。

    // async  await语法糖
    let a1 = () => {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve('我是a1')
            }, 4000)
        })
    }
    let a2 = () => {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve('我是a2')
            }, 40)
        })
    }
    let a3 = () => {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve('我是a3')
            }, 40)
        })
    }
    // 想让a1完成后再执行a2再执行a3
    //能避免回调
    async function asy() {
        await a1().then((res) => { console.log(res) });
        await a2().then((res) => { console.log(res) });
        await a3().then((res) => { console.log(res) });
    }
    asy();
    
    • async表示这是一个async函数,await只能用在这个函数内部
    • await表示在这里等待promise返回结果后,再继续执行
    • await后面跟着的应该是一个promise对象(当然,其他返回值也没关系,只是会立即执行,不过那样就没有意义了...)
    • await等待的虽然是promise对象,但不必写.then(...),直接可以得到返回值

    相关文章

      网友评论

        本文标题:promise 与 async await 异步之美

        本文链接:https://www.haomeiwen.com/subject/phhrcctx.html