gpt4 book ai didi

javascript - `Promise.all` 和大量异步操作的性能考虑

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:33:42 24 4
gpt4 key购买 nike

使用 Promise.all 时使用异步代码(在同步代码的情况下,没有什么可担心的),当你想发送一大堆(数十,数百,数千)时,你可能会遇到严重的性能(如果不是其他类型的话)问题甚至数百万)的请求,考虑到异步操作的接收端(例如本地文件系统、HTTP 服务器、数据库等)不能很好地处理那么多并行请求。

对于这种情况,如果我们可以告诉 Promise.all 我们希望同时运行多少个 promise 就完美了。然而,由于 A+ 应该是精简的,添加这些花哨的功能肯定没有意义。

那么实现这一目标的更好方法是什么?

最佳答案

好吧,首先 - 不可能为 Promise.all 提供并发参数,因为 promises 代表已经开始的操作,所以你不能在它们之前排队或等待执行。

您想在有限并发的情况下执行的是 promise 返回函数。幸运的是 - bluebird 使用 Promise.map 附带此功能(从版本 2.x 开始):

 Promise.map(largeArray, promiseReturningFunction, {concurrency: 16});

concurrency 参数决定一次可以发生多少个操作——注意这不是一个全局值——但只针对这个链。例如:

Promise.map([1,2,3,4,5,6,7,8,9,10], function(i){
console.log("Shooting operation", i);
return Promise.delay(1000);
}, {concurrency: 2});

Fiddle

请注意,无法保证执行顺序。

关于javascript - `Promise.all` 和大量异步操作的性能考虑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29721610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com