通过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内部是按照顺序执行的