我在Angular中建立一个后卫,我需要在这两个不同的HTTP请求中,根据这两个请求,确定是否继续。我注意到forkJoin
是正确的方法,但我无法解雇。
在我的代码中,我有:
this.userService.watchCurrentUser().subscribe(data => { console.log(data) });
this.orgService.watchOrg().subscribe(data => { console.log(data) });
Observable.forkJoin(
this.userService.watchCurrentUser(),
this.orgService.watchOrg()
).subscribe(data => {
console.log(data);
});
之后添加了前两个订阅以测试调用是否实际触发,它们是;我看到他们的日志。但我从来没有从forkJoin
看到很多。
我将它导入我的文件顶部:
import { Observable, BehaviorSubject } from 'rxjs/Rx';
import 'rxjs/add/observable/forkJoin';
为了使用forkJoin
,我还缺少其他东西吗?
答案 0 :(得分:3)
Observable.forkJoin()
要求所有源Observable发出至少一个项目并完成。
您确定两个源Observable都已完成吗?
如果他们不这样做(并且根据他们的内部逻辑他们不能),也许你宁愿使用zip()
或combineLatest()
。
答案 1 :(得分:0)
在你的情况下,一个守卫,你只需要每个流的一个结果。 因此,你应该这样:
Observable.forkJoin(
this.userService.watchCurrentUser().first(),
this.orgService.watchOrg().first()
).map(data => {
let permitted: boolean;
// check the data you want to.
return permitted;
});
在上面的代码中,fork组合了两个observable的第一个结果,两个结果都将映射到一个布尔值。