2016-09-27 82 views
3

我有两个行为主题流,我试图forkJoin没有运气。正如我想象的那样,它给出了它的最后两个值。这可能以某种方式实现它吗?ForkJoin 2 BehaviorSubjects

它不在主题后面调用。

let stream1 = new BehaviorSubject(2); 
let stream2 = new BehaviorSubject('two'); 

Observable.forkJoin(stream1, stream2) 
    .subscribe(r => { 
     console.log(r); 
    }); 

回答

4

注意什么forkJoin()实际上从它的文档的功能:

并行运行所有可观察序列,并收集他们的最后一个元素。

这意味着forkJoin()发射时所有输入可观察是完整的值。当使用BehaviorSubject这意味着显式调用他们两个complete()

import {Observable, BehaviorSubject} from 'rxjs'; 

let stream1 = new BehaviorSubject(2); 
let stream2 = new BehaviorSubject('two'); 

Observable.forkJoin(stream1, stream2) 
    .subscribe(r => { 
    console.log(r); 
    }); 

stream1.complete(); 
stream2.complete(); 

见现场演示:http://plnkr.co/edit/MtYfGLgqgHACPswFTVJ5?p=preview

+0

谢谢您的回答!您是否测试过您的代码,因为该日志未在我的计算机中调用? – user1693057

+0

@ user1693057我更新了我的答案 – martin