You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Deno中能否将两个pooledMap返回的异步迭代对象合并?

问题原因

pooledMap返回的是异步可迭代对象,并非普通数组,所以无法使用Array.concat方法合并。

解决方案

方案1:并行合并(推荐)

用Deno标准库内置的mergeAsyncIterables工具合并,两个池的任务会并行执行,哪边先返回结果就先处理哪边,性能更高:

// 导入工具
import { mergeAsyncIterables } from "https://deno.land/std@0.208.0/async/merge.ts";

// 合并两个异步迭代池
const mergedPool = mergeAsyncIterables(pool, pool2);

// 遍历逻辑和你之前单池的写法完全兼容
const results = [];
for await (const data of mergedPool) {
  console.log('data: ', data); 
  console.log('found links: ', data?.links?.length);

  // 加空数组兜底避免data.links为空时报错
  for (const link of data?.links ?? []) {
    const url = link.trim();
    results.push(url);
  }
}

合并后两个池的并发限制各自独立,原配置每个池20并发,合并后总并发最高为40,可根据需求自行调整pooledMap的第一个参数。

方案2:串行合并(无需额外依赖)

如果不需要并行执行,想要先跑完第一个池的所有任务再跑第二个池,可以自己实现简易的合并函数:

// 串行合并异步迭代器的生成器函数
async function* concatAsyncIters(...iters) {
  for (const iter of iters) {
    yield* iter;
  }
}

// 合并两个池
const mergedPool = concatAsyncIters(pool, pool2);

// 后续遍历逻辑和方案1完全一致

内容的提问来源于stack exchange,提问作者chovy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:06:09