我在angular2应用程序中使用reactivex的主题来发出事件信号。
当我做这样的事情时:
let subject1 = new Subject<string>();
let subject2 = new Subject<string>();
subject1.subscribe(data=>console.debug(data));
subject2.subscribe(data=>console.debug(data));
subject1.next("this is test event1");
subject2.next("this is test event2");
一切都很好,但我想等待两个事件都启动,然后采取一些行动。我找到了Observable.forkJoin,但我无法使它与主题一起工作。像这样的代码不起作用
Observable.forkJoin(
subject1.asObservable(),
subject2.asObservable()
).subscribe(
data => {
console.debug("THIS IS MY FJ");
console.debug(JSON.stringify(data));
},
error=>console.error(error),
()=>{
console.info('THIS IS MY FJ SUCCESS');
}
);
你能帮我解决这个问题吗。
致以最诚挚的问候Krzysztof Szewczyk
在您的情况下,您需要使用zip
运算符。该算子将合并指定的可观察序列,而forkJoin
算子并行运行所有可观察序列并收集它们的最后元素。
因此,forkJoin
运算符可以处理HTTP可观察性,但不能处理主题。
这是一个样品。
export class App {
subject1: Subject<string> = new Subject();
subject2: Subject<string> = new Subject();
constructor() {
this.subject1.subscribe(data=>console.debug(data));
this.subject2.subscribe(data=>console.debug(data));
Observable.zip(
this.subject1,
this.subject2
).subscribe(
data => {
console.debug("THIS IS MY FJ");
console.debug(JSON.stringify(data));
},
error=>console.error(error),
()=>{
console.info('THIS IS MY FJ SUCCESS');
}
);
}
test() {
this.subject1.next("this is test event1");
this.subject2.next("this is test event2");
}
参见相应的plunkr:https://plnkr.co/edit/X74lViYOgcxzb1AjC9dL?p=preview.