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

如何使新建的Observable向订阅者发送布尔值?

解决RxJS Observable发送布尔值的问题

错误原因

你遇到的报错核心问题是:Observable构造函数的回调函数不能直接返回要发送的数据。这个回调的参数是Subscriber对象,你需要通过调用它的next()方法来发射数据;回调的返回值必须是TeardownLogic(比如一个清理函数,用于取消订阅时执行),而非你要发送的布尔值。

正确写法

1. 手动创建Observable的标准方式

要发送布尔值,需在回调里调用subscriber.next()传递数据,完成后可调用complete()标记数据流结束:

let myObservable = new Observable<boolean>(subscriber => {
  console.log("from observable");
  // 发送目标布尔值
  subscriber.next(true);
  // 可选:结束数据流,告知订阅者不会再有新数据
  subscriber.complete();
  // 可选返回清理逻辑(比如取消定时器、解绑事件等)
  return () => {
    console.log("订阅已取消");
  };
});

myObservable.subscribe(item => {
  console.log("from subscription");
  console.log(item); // 输出 true
});

2. 使用RxJS快捷创建函数(更推荐)

如果只是在订阅时发送单一布尔值,用RxJS内置的of()函数可以快速实现,无需手动编写构造函数:

import { of } from 'rxjs';

let myObservable = of(true);

myObservable.subscribe(item => {
  console.log("from subscription");
  console.log(item); // 输出 true
});

修正你的第一个示例

你的第一个示例中myObservable没有发射任何数据,导致map操作符无输入可处理。修正后让它正常发射布尔值:

import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

let myObservable = new Observable<boolean>(subscriber => {
  console.log("from observable");
  subscriber.next(false); // 发射初始布尔值
  subscriber.complete();
});

let otherObservable = myObservable.pipe(map(item => {
  return true; // 将输入转换为目标布尔值
}));

otherObservable.subscribe(item => {
  console.log("from subscription");
  console.log(item); // 输出 true
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:45:38