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

RxJs zip操作符仅取发送流首个值,其余值为何未输出?

RxJS zip操作符剩余值未输出原因说明

zip操作符的核心运行逻辑是:必须收集到所有输入流在相同索引位置的发射值后,才会将这组值组合为数组向外发射,只要任意一个输入流完成且无更多值可配对,整个zip流就会直接终止,其余流中未完成配对的剩余值会被直接丢弃。

对应你给出的代码,三个参与zip组合的流发射情况如下:

  • 第一个流of(1, 2, 3):共发射3个值,发射顺序为1 → 2 → 3,发射完成后终止
  • 第二个流of(5):仅发射1个值5,发射后立即终止
  • 第三个流of(10):仅发射1个值10,发射后立即终止

运行时的配对流程为:

  1. 第一轮配对:三个流分别拿出各自的第一个发射值1、5、10,组合为[1,5,10]输出
  2. 进入下一轮配对检测时,第二个和第三个流都已经终止,没有对应索引位置的新值可以参与配对,zip流直接停止运行
  3. 第一个流剩余的2、3因无法找到另外两个流的对应配对值,被直接丢弃,因此不会出现在输出结果中。

如果需要让of(1,2,3)的三个值都参与输出,需要保证另外两个参与zip的流也至少发射3个值,示例修改如下:

of(1, 2, 3)
  .pipe(zip(of(5, 6, 7), of(10, 11, 12)))
  .subscribe((a) => console.log(a));

修改后运行输出为:

[1,5,10]
[2,6,11]
[3,7,12]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:45:00