如何使新建的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
相关产品推荐
相关产品推荐

