这是任何角度组件的 ngInit 中的测试:
console.log('a');
observableFoo$.subscribe(x => console.log('b'));
observableNotFoo$.subscribe(() => console.log('c'));
forkJoin([
observableFoo$,
observableNotFoo$
]).subscribe(([foo, ntFoo]) => {
console.log('d');
});
ObservableFoo$ 将触发 2 次,这是我需要的行为,这个 observable 将观察到一个在初始化期间可以快速变化的值。
结果是:
a
b
b
c
并且从不登录。所以,我首先尝试做同样的事情,但只使用 ObservableNotFoo$ 只是为了确保我可以在单个 Observable 上 forkJoin (没用但它有效),然后我用 ObservableFoo$ 尝试了同样的事情,但它不起作用。
似乎 forkJoin 只是不接受会触发两次的订阅。是这样吗?好像真的很奇怪...
** 编辑 : **
observableFoo$ = initFoo(this.id);
observableNotFoo$ = of('notFoo');
initFoo(id: string): Observable<any> {
const content = this.store.select({
filterBy: entity => entity.id === id
}).pipe(
flatMap(v => {
const value = v[0];
if (!value) {
return httpRequest.get(this.baseUrl + '/' + id).pipe(map(val => {
this.store.add(val);
return val;
}));
}
return of(value);
})
);
return content;
}
}