我需要创建一个对Observable
的订阅,它在第一次被调用时会立即被处理掉。
有没有类似这样的东西:
observable.subscribeOnce(func);
我的用例是,我在一个快速路由处理程序中创建了一个订阅,该订阅在每个请求中被多次调用。
发布于 2015-01-20 01:33:46
不是百分之百确定您需要什么,但是如果您只想观察第一个值,那么使用first()
或take(1)
observable.first().subscribe(func);
注意:当满足条件时,.take(1)
和.first()
都会自动取消订阅
从RxJS 5.5+更新
来自Coderer的评论。
import { first } from 'rxjs/operators'
observable
.pipe(first())
.subscribe(func);
发布于 2015-03-26 01:20:39
RxJS有一些我见过的最好的文档。点击下面的链接,你会看到一个非常有用的表格,它将用例映射到运算符。例如,在“我想取第一个值”用例下有三个运算符:first
、firstOrDefault
和sample
。
请注意,如果一个可观察的序列在没有通知的情况下完成,则first
操作符通知订阅者一个错误,而firstOrDefault
操作符向订阅者提供默认值。
发布于 2019-01-23 22:54:41
为了补充@Brandon's answer,使用first()
等对于基于其Observable
更新BehaviorSubject
也是必不可少的。例如(未测试):
var subject = new BehaviorSubject({1:'apple',2:'banana'});
var observable = subject.asObservable();
observable
.pipe(
first(), // <-- Ensures no stack overflow
flatMap(function(obj) {
obj[3] = 'pear';
return of(obj);
})
)
.subscribe(function(obj) {
subject.next(obj);
});
https://stackoverflow.com/questions/28007777
复制相似问题