You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按数组顺序依次发送不同类型对象的POST请求?

解决方案

问题根源有两个:

  1. 排序逻辑不可靠:用字符串localeCompare比较日期,若created_at不是ISO标准格式(如MM/DD/YYYY),会导致排序结果和实际时间顺序不符。
  2. 分支判断不严谨:多个独立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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 00:35:54