如何结合可选链操作符与map方法,避免SQS不存在时执行map?
解决方案
问题核心是:当doc?.SQS不存在时,你传给Promise.all的是undefined,但Promise.all要求参数必须是可迭代对象(比如数组),直接传undefined会抛出TypeError,导致代码报错。
正确写法1:用空值合并运算符兜底空数组
await Promise.all(doc?.SQS?.map(async (queue) => { // 单个队列打标逻辑 }) ?? [])
- 当
doc?.SQS不存在时,doc?.SQS?.map?.(...)返回undefined,?? []会将其替换为空数组 Promise.all([])会直接解析为成功状态,不会执行任何异步操作,完全匹配需求
正确写法2:提前处理为空数组
const sqsList = doc?.SQS || []; await Promise.all(sqsList.map(async (queue) => { // 单个队列打标逻辑 }));
- 先把
doc?.SQS兜底为空数组,后续直接调用map,避免可选链带来的undefined问题 - 逻辑更直观,适合需要多次复用
sqsList的场景
为什么之前的写法失效?
- 第一种写法:
doc?.SQS?.map?.(...)在SQS不存在时返回undefined,传给Promise.all会触发TypeError: undefined is not iterable - 第二种写法:
doc?.SQS && ...在SQS不存在时返回undefined,同样导致Promise.all参数非法
内容的提问来源于stack exchange,提问作者Naxi
相关产品推荐
相关产品推荐

