异步顾名思义是“异步”的意思,异步用于声明一个函数是异步的。而AWAIT从字面意思上是“等待”的意思,就是用于等待异步完成。并且AWAIT只能在异步中函数使用通常异步,待机都是跟随无极一起使用的。为什么这么说呢?因为异步返回的都是一个承诺对象同时异步适用于任何类型的函数上。这样的AWAIT得到的就是一个承诺对象(如果不是无极对象的话那异步返回的是什么就是什么); await得到Promise对象之后就等待Promise接下来的解析或者拒绝。来看一段简单的代码:复制代码1 async function testSync(){2 const response = await new Promise(resolve => {3 setTimeout(()=> {4 resolve(“async await test ...”); 5},1000); 6}); 7 console.log(响应); 8} 9 testSync(); // async await test ...复制代码就这样一个简单的async,await异步就完成了。使用异步,等待完成异步操作代码可读与写法上更像是同步的,也更容易让人理解.async,待机串行并行处理
串行:等待前面一个await执行后接着执行下一个await,以此类推复制代码1 async function asyncAwaitFn(str){2 return await new Promise((resolve,reject)=> {3 setTimeout(()=> { 4 resolve(str)5},1000); 6})7} 8 9 const serialFn = async()=> {//串行执行10 11 console.time('serialFn')12 console.log(等待asyncAwaitFn('string 1')); 13 console.log(等待asyncAwaitFn('string 2')); 14 console.timeEnd('serialFn')15} 16 17 serialFn(); 复制代码可以看到两个AWAIT串行执行的总耗时为两千多毫秒并行:将多个承诺直接发起请求(先执行异步所在函数),然后再进行AWAIT操作复制代码
1 async function asyncAwaitFn(str){2 return await new Promise((resolve,reject)=> {3 setTimeout(()=> {4 resolve(str)5},1000); 6})7} 8 const parallel = async()=> {//并行执行9 console.time('parallel')10 const parallelOne = asyncAwaitFn('string 1'); 11 const parallelTwo = asyncAwaitFn('string 2')12 13 //直接打印14 console.log(等待parallelOne)15 console.log(等待parallelTwo)16 17 console.timeEnd('parallel'3 const errRes = await new Promise( (解决,拒绝)=> {4 setTimeout(()=> {5拒绝(“http错误......”); 6},1000); 7); 8 //平常我们也可以在等待请求成功后通过判断当前状态是不是200来判断请求是否成功9 // console.log(errRes.status,errRes.statusText); 10} catch(err){11 console.log(err); 12} 13} 14 catchErr(); // http错误...