如何按数组顺序依次发送不同类型对象的POST请求?
解决方案
问题根源有两个:
- 排序逻辑不可靠:用字符串
localeCompare比较日期,若created_at不是ISO标准格式(如MM/DD/YYYY),会导致排序结果和实际时间顺序不符。 - 分支判断不严谨:多个独立
if语句存在触发多分支的风险(即使理论上每个对象只属于一种类型),可能打乱串行执行逻辑。
修改步骤:
1. 修复排序逻辑
将created_at转换为Date对象后再比较,确保排序基于实际时间先后:
const sortedCopiedActionsArray = copiedActionsArray.sort((a, b) => { const dateA = new Date(a.created_at); const dateB = new Date(b.created_at); return dateA - dateB; // 升序排列,更早的对象在前 });
2. 优化循环分支判断
用else if替代独立if,确保每个对象仅触发一个请求分支;同时用for...of循环简化写法(普通for循环也可),保证串行执行:
for (const item of sortedCopiedActionsArray) { if ("properties" in item) { await createCommandsPayload(item, newResponseSetID); } else if ("action_type" in item) { await createCMActionsPayload(item, newResponseSetID); } else if ("notifiable_type" in item) { await createNotificationsPayload(item, newResponseSetID); } }
原理说明
Date对象相减会返回时间戳差值,能准确比较时间先后,避免字符串排序的误差。for...of循环配合await会自动阻塞迭代:只有当前请求完成(拿到响应)后,才会进入下一次循环处理下一个对象,严格保证请求发送顺序和数组排序后的顺序一致。
内容的提问来源于stack exchange,提问作者Eric Garcia
相关产品推荐
相关产品推荐

