我想知道是否有一种更优雅的方式来处理这段代码
return new Observable(subscriber => {
let subscription = this.anotherObservable().subscribe(
(next) => {
if (this.condition1(next)) {
subscriber.next(next);
} else if (this.condition2(next)) {
subscriber.complete();
} else {
subscriber.error('there was an error');
}
},
(error) => subscriber.error(error),
() => subscriber.complete()
);
return () => subscription.unsubscribe();
});
此代码位于类中的方法内。
anotherObservable
会返回一个Observable,它会根据condition1
值发出不同类型的数据,这就是condition2
和next
布尔值的原因。
我的问题是,我错过了一些操作符组合,它们可以使用相同的行为来处理这个Observable,但使用管道而不是重写" custom"可观察到的?
答案 0 :(得分:2)
使用takeWhile和flatMap的组合:
const subscription = anotherObservable.pipe(
takeWhile(someValue => !this.condition2(someValue)),
flatMap(someValue => {
if(this.condition1(someValue)) {
return of(someValue);
}
return throwError('there was an error');
})
).subscribe(someValue => //do something with value);