es6有两个新的异步语法,一个是async,await,一个是promise,二者我更青睐于async,await,缘由很简单,async,await语法糖让代码更清晰,更直观。
简单的讲一下,async函数返回一个 Promise 对象,能够使用then方法添加回调函数。当函数执行的时候,一旦遇到await就会先返回,等到异步操做完成,再接着执行函数体内后面的语句。那其实就是说在async函数内,每当遇到await关键字的时候,函数就是阻塞住,必须等到异步操做有结果时才会往下继续执行,思考下,咱们关心的异步返回的结果,那么也就是说咱们能够异步函数执行的结果储存起来,在须要的时候再去await,看下面的代码es6
function asyncAfun() { return new Promise((resolove)=>{ setTimeout(function() { resolove(123); }, 3000); }) } function asyncBfun() { return new Promise((resolove)=>{ setTimeout(function() { resolove(456); }, 3000); }) } async function test () { let a = asyncAfun();//不阻塞 let b = asyncBfun();//不阻塞 let _a = await a; //这里等待a的返回 后面能够do something let _b = await b;//这里等待b的返回 后面能够do something }
那么当你须要同时并发大量请求,而且等待全部的请求结果完成的时候能够这么写promise
async function test () { let a = asyncAfun(); let b = asyncBfun(); let _a = await a; let _b = await b; Promise.all([_a,_b]).then(v=>{ console.log(v) }) }
Promise.all的做用能够去MDN查,相似的还有Promise.race并发
学以至用,以上异步