我目前正在解析一个 js 对象列表,这些对象被一个一个地插入到数据库中,与 Node.js 大致类似:
return promise.map(list,
return parseItem(item)
.then(upsertSingleItemToDB)
).then(all finished!)
问题是当列表大小变得非常大(约 3000 个项目)时,并行解析所有项目会占用大量内存。使用 Promise 库添加并发限制非常容易,并且不会以这种方式耗尽内存(when/guard)。
但我也想优化 db upserts,因为 mongodb 提供了 bulkWrite 函数。由于一次解析和批量写入所有项目是不可能的,所以我需要将原始对象列表拆分为较小的集合,这些集合使用 Promise 并行解析,然后该集合的结果数组将传递给 Promisified bulkWrite。如果列表项,这将对剩余的集合重复。
我很难思考如何构建较小的承诺集,以便我一次只执行一组 parseSomeItems-BulkUpsertThem(类似于 Promise.all([set1Bulk][set2Bulk]),其中 set1Bulk是另一个并行解析器承诺数组吗?),任何伪代码帮助都将不胜感激(但我正在使用 when 如果这会有所不同)。