我在angular2应用程序中使用subject of subject来表示事件。
当我做那样的事情时:
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,但我不能让它与Subjects一起工作。像这样的代码不起作用
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
答案 0 :(得分:2)
在您的情况下,您需要使用zip
运算符。此运算符将合并指定的可观察序列,而forkJoin
运算符并行运行所有可观察序列并收集它们的最后元素。
所以forkJoin
运算符适用于HTTP observables,但不适用于主题。
以下是一个示例。
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。