【发布时间】:2018-05-25 23:46:24
【问题描述】:
我有一个需要从 API 请求的 url 列表,但是为了避免造成大量负载,我希望以 x 秒的间隔执行这些请求。一旦所有的请求都完成了,一些无关紧要的逻辑就会随之而来。
有很多方法可以解决,我已经实现了几个。
A) 使用递归函数遍历包含所有 url 的数组并在每个请求完成并发生超时时调用自身
B) 为循环中的每个请求设置超时,并增加延迟并返回 Promise,在使用 Promise.all 解决时执行其余逻辑等等。
这些都有效。但是,您会说什么是推荐的解决方法?这更像是一个学术类型的问题,当我这样做是为了学习时,我宁愿避免使用抽象果汁的库。
【问题讨论】:
-
你确定拆分它有什么好处吗?虽然留出空间不会同时进行所有加载,但发送和接收的数据总量不会改变,只要总加载时间小于秒,就不会有人注意到任何事情。
-
推荐的方式可能意味着很多事情。你的意思是性能方面吗?您的意思是实施起来有困难吗?
-
recommended way- 我想说,在 A 或 B 这两个中,我可能会在生产环境中选择,我不会使用这两个“模式”跨度> -
-在 Akxe,每个请求都会触发一个非常繁重的处理过程,因此负载实际上不在网络中,而是在 CPU 中。 -在 maxpaj 我应该对此更具体。我的意思是好的代码。我的解决方案对我来说似乎很老套,但我不知道我不知道什么。 -在 JaromandaX 没有冒犯,但你告诉我的只是“不要使用那些”,而不是为什么或提供更好的选择:/
-
A 解决方案不保证每个周期开始 x 数量,它会开始 x 数量,当它们完成后开始另一个 x 数量。解决方案 B 是我在回答中使用的,但在名为
later的函数中使用超时,并安排在最早可用时间返回承诺的函数。每个时期的计划允许每个时期的 x 数量,并且不在乎它们何时完成。但是您也可以限制活动,这将不允许超过 x 数量的活动,并且当一个解决另一个开始时。
标签: javascript node.js promise