Mat*_*hyn 4 rxjs firebase rxjs5 angularfire2 angular
请帮我解决一个我正在努力的问题.
我有一组Firebase对象键
const keys = ['-Kx9pqoMWlJLbKLQcAkP', '-Kx9pqoOYlDHTJ64Was5']
Run Code Online (Sandbox Code Playgroud)
我要做的是使用一个流中的所有Firebase对象forkJoin.这就是我所拥有的:
const obj1 = this.fbService.getObj(keys[0]);
const obj2 = this.fbService.getObj(keys[1]);
forkJoin([obj1, obj2])
.subscribe(res => {
console.log(res); // <-- this never happens
};
Run Code Online (Sandbox Code Playgroud)
fbService方法是:
getObj(key): Observable<MyObj> {
return this.fb.object(`/path/to/obj/${key}`).valueChanges();
}
Run Code Online (Sandbox Code Playgroud)
我认为这种getObj方法效果不好forkJoin,也许是因为valueChanges我正确使用它?
然而:
getObj 适用于获取单个Firebase对象,例如:
this.fbService.getObj(keys[0])
.subsribe(res => console.log(res))// <-- works
Run Code Online (Sandbox Code Playgroud)forkJoin 适用于简单的HTTP请求,例如
const r1 = this.http.get('https://swapi.co/api/people/1');
forkJoin([r1])
.subscribe(res => {
console.log(res); // <-- works
};
Run Code Online (Sandbox Code Playgroud)那么,我做错了什么?我的目标是从键数组中获取对象数组:
['-Kx9pqoMWlJLbKLQcAkP', '-Kx9pqoOYlDHTJ64Was5'] => [{prop:'val'},{prop:'val2'}]
Run Code Online (Sandbox Code Playgroud)
该forkJoin运营商要求所有源观测量发射至少一个项目,并完成.
我对firebase了解不多,但我怀疑它valueChanges永远不会完成所以这就是为什么forkJoin永远不会发出任何东西.使用它的一种方法是使用take(1)始终完成链.
forkJoin(obj1.take(1), obj2.take(1)).subscribe(res => console.log(res);
Run Code Online (Sandbox Code Playgroud)
也许在你的情况下,最好使用zip()只需要所有源Observable发出相同数量项的运算符.但是请确保取消订阅,因为在源Observables完成之前它不会完成.
| 归档时间: |
|
| 查看次数: |
482 次 |
| 最近记录: |