无法使用forkJoin来解雇

时间:2017-04-15 14:11:03

标签: angular typescript rxjs

我在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,我还缺少其他东西吗?

2 个答案:

答案 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的第一个结果,两个结果都将映射到一个布尔值。