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

RxJS first操作符疑问:两段代码为何输出不同?

为什么两段RxJS代码的first操作符输出不同?

核心原因是你创建的两个Observable发射的内容完全不一样,first()操作符只是取它们各自发射的第一个值而已:

  • 第一段代码用new Observable<number[]>创建的流,是一次性把整个数组作为单个值发射出去。这个Observable从头到尾只发射一次,值就是[1,2,3,4]。所以first()拿到的就是这个唯一的发射值,输出自然是完整数组。

    对应的代码逻辑等价于:

    new Observable(subscriber => {
      subscriber.next([1,2,3,4]); // 发射单个数组值
      subscriber.complete();
    }).pipe(first()).subscribe(console.log);
    // 输出: [1,2,3,4]
    
  • 第二段代码用from([1,2,3,4])创建的流,RxJS的from操作符会把数组拆分成单个元素逐个发射。这个流会依次发射1、2、3、4四个值,first()操作符会立即取第一个被发射的1,然后直接结束订阅,所以输出是1。

    对应的代码逻辑等价于:

    from([1,2,3,4]).pipe(first()).subscribe(console.log);
    // 依次发射1 → 2 → 3 →4,first()取第一个值后就终止
    // 输出: 1
    

简单说,first()的作用是取Observable发射的「第一个值」,但你给它的两个流发射的“值”定义完全不同——一个是数组整体,一个是数组里的每个元素,结果自然不一样。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:38:11