gpt4 book ai didi

javascript - 将数组拆分为 block / block 并对其进行一一操作

转载 作者:行者123 更新时间:2023-11-30 11:07:01 25 4
gpt4 key购买 nike

我对标签有点抱歉,可能我理解我的问题不正确并且使用错误但是..

我的项目面临的问题对我来说是新的,我以前从未遇到过。所以在我的例子中,我有一个来自 DB 的巨大数据集响应(Mongo,100'000 多个文档),我需要 http-request 来自文档的每个特定字段。

数据集中的示例数组如下:

{
_id: 1,
http: http.request.me
},
{
//each doc of 99k docs more
}

所以我猜你已经明白我不能使用默认的for循环因为

  1. 如果 async 我会收到大量的 API 请求,并且会被禁止/限制/无论如何
  2. 如果我一个接一个完成它,我将花费大约 12-23 小时在我的循环完成之前等待。 (其实这种方式是在使用)

This is what I'm trying to do right now

  1. 还有另一种方法,这就是我来这里的原因。我可以将我的大数组分成多个 block ,例如每个 5/10/100..N 并请求它们一个接一个

    │→await[request_map 0,1,2,3,4]→filled
    │→await[request_map 5..10]→filled
    │→await[request_map n..n+5]→filled

根据Split array into chunks我可以轻松做到。但是我应该使用 2 个 for 周期,第一个将拆分默认数组,第二个 async-request 这个新数组(长度 5/10/100...N)

但我最近听说响应式(Reactive)范式和 RxJS(可能)可以解决这个问题。这是正确的吗?我应该使用什么运营商?我应该使用什么关键字来查找相关问题? (如果我用谷歌搜索响应式(Reactive)编程,我会收到很多关于 react.js 的无用结果,但不是我想要的)

所以我应该关心所有这些并只写一个未优化的代码,还是有一个 npm-module 或另一个更好的模式/解决方案?

Probably I found and answer here RxJS 1 array item into sequence of single items - operator I'm checking it now, but I also appreciate any relevant contribution to this question


RxJS has truly been helpful in this case and worth looking. It's an elegant solution for this kind of problems

最佳答案

利用bufferCount和concatMap

range(0,100).pipe(
// save each http call into array as observable but not executing them
map(res=>http(...)),
//5 at a time
bufferCount(5),
//execute calls concurrently and in a queue of 5 calls each time
concatMap(res=>forkJoin(res))
).subscribe(console.log)

关于javascript - 将数组拆分为 block / block 并对其进行一一操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55188196/

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