js Promise async await 学习研究

通过Promise async await可以实现同步按照顺序执行的效果,具体如下

 function asyncFunc(num) {
        return new Promise((resolve, reject) => {  //将异步函数放到Promise中,成功时resolve,失败时reject
            setTimeout(() => {
                resolve("timeout_" + num);  //模拟异步函数
            }, num);
        })
    }
    async function test() { //await必须要在async修饰的函数中使用
        var p1 = await asyncFunc(3000);  //asuncFunc返回的是Promise,加上await就会等待,并且返回值变成了Promise的resolve传入的值
        console.log(p1);
        var p2 = await asyncFunc(2000);  //按照顺序调用异步函数,感觉像是排队执行,总共耗时3000+2000+1000=6000毫秒
        console.log(p2);  //这些没有await的操作也是按照顺序的,await是等待的意思,它不执行完貌似就不往下走
        var p3 = await asyncFunc(1000);
        console.log(p3);
        return p1 + " + " + p2 + " + " + p3;  //异步函数能可控的按照顺序执行了,并且能以返回值的形式获取,就很爽
    }
    console.log(111);
    test().then(p => {  //async修饰的函数貌似都会返回Promise,它本身是异步的,所以要用到这个then,有点类似回调函数
        console.log(p); //这里可以获取test的返回值,如果是在aysnc修饰的函数中使用,直接await test()就可以了,但是没有的话,就只能通过then回调了
    });
    console.log(222);  //因为test是异步的,所以222会比p早输出,test内部是按照顺序执行的
原文地址:https://www.cnblogs.com/luludongxu/p/13408462.html