前两天有个同学在面试中被问到了一个问题:“如果在请求多个不同的接口,那么应该如何去做?” 该同学回答说:“我们可以把这些接口放到一个数组中,然后通过 for
循环来循环请求!”
嗯...这确是是一个方式,不过这并不好。再加上异步问题现在已经成了面试中的常见问题,所以,今天咱们就来说一下 异步请求的最佳实践,帮助大家解决异步编程,以及面试问题。
1.不使用 await 的循环请求
我们不应该在循环内使用 await
。 而是可以利用 promise.all
方法:
2.不要在 promise 中执行返回操作
不要在 Promise 构造函数中返回值。 从那里返回的值是无用的。 它们也不影响 Promise 的状态。
- 正确的方法是使用
resolve
传递值。 - 如果有错误,则使用
reject
传递错误。
3.避免竞态问题
看以下代码,你认为最终打印会是多少?
执行以上代码,你可能会打印 3 或 5,而不是 8。
这个原因就是因为 竞态条件 问题而导致的。当在单独的函数调用中更新值时,更新不会反映在当前函数作用域中。 因此,这两个函数都将其结果添加到初始的 TotalPosts 值 0 中。
以下是避免竞态条件的方式:
4.避免回调地狱
这个问题大家应该很好理解,直接看代码即可
5.避免直接返回 await
尽量避免直接返回 await ,特别是在需要 try..catch
的时候: