多数据存在性校验场景下是否应当使用Promise.all?
两种方案没有绝对的优劣,选择标准完全取决于你的业务场景特征:
- 资源缺失概率高的场景选串行方案
比如第一个校验的A资源是高频失效、或者用户输入错误率极高的资源,只要A不存在就不需要查后面的B和C,能直接砍掉大量不必要的数据库请求,降低数据库负载,尤其在接口QPS很高的场景下,这种优化能显著减少数据库的压力。 - 资源大概率都存在的场景选并行方案
如果三个资源都是上层逻辑已经预校验过,只有极低概率会出现缺失,那并行方案能把接口总耗时从三次查询的耗时总和,压缩到三次查询里最慢的那一次的耗时,接口响应速度提升明显,用户体验更好。
注:你给出的示例代码存在语法错误,异步函数的正确声明写法是
async function test() {},function和async的顺序写反了。
额外优化建议
如果想同时兼顾两种方案的优势,还可以做进一步优化:
- 优先调整校验顺序:把缺失概率最高的资源放到串行校验的最前面,能最大化提前终止的概率,降低不必要的查询开销
- 合并查询请求:如果三个查询是同一个数据库的请求,优先用批量查询语法把三次查询合并成一次请求(比如同表数据用
$in语法,不同表数据如果数据库支持多语句查询也可以合并发送),既减少了和数据库的网络往返次数,也能灵活控制是否需要全量执行
内容的提问来源于stack exchange,提问作者Chicky
相关产品推荐
相关产品推荐

