我很讨厌:
const observable = new Observable(subscriber => {
subscriber.next(1);
subscriber.next(2);
subscriber.next(3);
})
,我想以这种方式订阅:
observable.subscribe({
next(x) {
console.log('got value ' + x);
if (x == 2) {
const observable2 = new Observable(subscriber => {
subscriber.next('a');
subscriber.next('b');
subscriber.next('c');
})
observable2.subscribe(...)
}
},
error(err) { console.error('something wrong occurred: ' + err); },
complete() { console.log('done'); }
});
我有Observable哪个“抛出”了一些数据,如果数据等于某个特定值,我需要
暂停主要可观察对象
在if块中订阅Observable
从“有条件的”可观察数据中获取一些数据
恢复主要可观察对象
答案 0 :(得分:0)
我认为,以这种方式处理可观察对象将使长期维护代码变得困难。如果您有多个可观察对象要订阅,则还必须处理它们的订阅等。
因此,对于这种特定情况,以下是我的解决方法:
const source = of(1, 2, 3);
const subscription = source
.pipe(
/**
* `Pause` the main observable
* Won't to get the next emitted value until this inner subscription is done
*/
concatMap(v => {
// The if block
if (v === 2) {
// Getting some data from the condition
return of('a', 'b', 'c');
}
return of('default value');
}),
)
.subscribe(v => console.log('value received!', v))
concatMap
是high order operators之一。
它还将返回一个可观察的对象,其订阅将由concatMap
在内部 处理。
const microS1$ = ...;
microS1$
.pipe(
// Insert your condition here
filter(content => typeof content === 'string')
)
.subscribe(d => {
// Send the data to the second microservice
microserviceTwo.sendData(d);
})