如何将 Observable 的 forkJoin 与自己的事件一起使用
How to use forkJoin of Observable with own event
我在我的 angular2 应用程序中使用 Reactx 的主题来发出事件信号。
当我做那样的事情时:
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.
我在我的 angular2 应用程序中使用 Reactx 的主题来发出事件信号。
当我做那样的事情时:
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.