问题
I have two behaviour subject streams what I'm trying to forkJoin with no luck. As I imagined it gives back the two last values of it. Is this possible to implement it somehow?
It is not called after the subject.
let stream1 = new BehaviorSubject(2);
let stream2 = new BehaviorSubject('two');
Observable.forkJoin(stream1, stream2)
.subscribe(r => {
console.log(r);
});
回答1:
Note what forkJoin() actually does from its documentation:
Wait for Observables to complete and then combine last values they emitted.
This means that forkJoin()
emits a value when all input Observable are complete. When using BehaviorSubject
this means explicitly calling complete()
on both of them:
import { Observable, BehaviorSubject, forkJoin } from 'rxjs';
const stream1 = new BehaviorSubject(2);
const stream2 = new BehaviorSubject('two');
forkJoin(stream1, stream2)
.subscribe(r => {
console.log(r);
});
stream1.complete();
stream2.complete();
See live demo: https://stackblitz.com/edit/rxjs-9nqtx6
March 2019: Updated for RxJS 6.
来源:https://stackoverflow.com/questions/39722440/forkjoin-2-behaviorsubjects