0

我有一个大小约为 10000 条记录的数据数组。我的客户端 API 在一小时内只能处理 1000 条记录,这将引发异常。有什么方法可以在迭代过程中/一旦计数器达到 990 就返回事件并调用引入一小时等待时间的下一步?

等待步骤完成后,我的迭代是否会从中断的地方开始?

4

1 回答 1

1

选项 1:一种方法是使用 2 个地图状态:

  • 将您的数组转换为数组数组:
[
   [array1] //contains 1000 items,
   [array2]

...
   [arrayn]
]
  • 遍历数组
  • 对于内部的数组再次迭代并调用您的 API
  • 暂停一小时

这里是大体思路,还有很多改进的空间,比如你可以计算API调用花费了多少时间,然后从等待时间中减去它等等。

也可以代替 Map 状态,创建一个带有选择状态的 while 循环并实现相同的目的。

在此处输入图像描述

{
  "StartAt": "SplitToArayofArrays",
  "States": {
    "SplitToArayofArrays": {
      "Type": "Pass",
      "Result": "Hello",
      "Next": "IterateFristArray "
    },
    "IterateFristArray ": {
      "Type": "Map",
      "ItemsPath": "$.array",
      "ResultPath": "$.array",
      "MaxConcurrency": 1,
      "Next": "Final State",
      "Iterator": {
        "StartAt": "IterateChildArray",
        "States": {
          "IterateChildArray": {
            "Type": "Map",
            "Iterator": {
              "StartAt": "IterateChildArray",
              "States": {
                "IterateChildArray": {
                  "Type": "Pass",
                  "Result": "Hello",
                  "End": true
                }
              }
            },
            "Next": "PauseOneHour"
          },
          "PauseOneHour": {
            "Type": "Wait",
            "Seconds": 3600,
            "End": true
          }
        }
      }
    },
    "Final State": {
      "Type": "Pass",
      "End": true
    }
  }
}

选项 2:一小时内 1000 条记录意味着每 3.6 秒调用一个 API。所以在map状态下添加一个等待状态3.6秒。

于 2020-12-04T21:09:10.837 回答