async函数内部的await一般情况都是继发运行,如果有多个请求,则后一个只有等前一个完成,才会发请求。
怎么实现请求并发呢?
把await语句放到子函数里面,await只在子函数中起作用,不会阻塞父函数
比如用map,forEach循环,把await放到循环体里面,await就放到子函数里面了
请求并发后怎么顺序输出结果呢
前面通过map返回了一个promise数组
可以用for循环,每个promise来一次await
await难点在于错误处理
async函数会返回Promise对象,async内部抛出的错误(包括await语句执行出错,或者其它js语句报错)会导致async返回的Promise被reject,reject的参数就是报错信息,并且async函数会立即结束执行。
如果希望某个await语句报错不影响后续执行,可以对这些await语句做好错误处理,这样错误信息就不会往外传递了,方式有2种,1 用try-catch代码块包裹await语句 2 await语句后面的Promise要加上catch函数
顶层await
这个可以用来模拟ajax的同步请求
编码规范
no-return-promise,no-return-await
如果你可以直接返回一个值,你不需要把它包在 Promise.resolve 里,async 函数本身就帮你做了,也不需要return await asyncFn,直接return asyncFn即可
ES6 入门教程es6.ruanyifeng.com 张振衣:async await 代码风格指南zhuanlan.zhihu.com![abe0cc3b908f7ef49aee76dd7e57999c.png](https://i-blog.csdnimg.cn/blog_migrate/75c5ab6c67526f91107dbb43d1e99622.jpeg)