gpt4 book ai didi

angular - forkJoin 不适用于 AngularFire2 valueChanges

转载 作者:太空狗 更新时间:2023-10-29 17:49:41 26 4
gpt4 key购买 nike

请帮助我解决我遇到的问题。

我有一个 Firebase 对象键数组

const keys = ['-Kx9pqoMWlJLbKLQcAkP', '-Kx9pqoOYlDHTJ64Was5']

我正在尝试做的是使用 forkJoin 在一个流中获取所有这些 Firebase 对象。这是我拥有的:

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
};

fbService 方法是:

getObj(key): Observable<MyObj> {
return this.fb.object(`/path/to/obj/${key}`).valueChanges();
}

我假设此 getObj 方法不能很好地与 forkJoin 一起使用,可能是因为 valueChanges,我是否正确使用它?

但是:

  • getObj 可以很好地获取单个 Firebase 对象,例如:

    this.fbService.getObj(keys[0])
    .subsribe(res => console.log(res))// <-- works
  • forkJoin 适用于简单的 HTTP 请求,例如

    const r1 = this.http.get('https://swapi.co/api/people/1');
    forkJoin([r1])
    .subscribe(res => {
    console.log(res); // <-- works
    };

那么,我做错了什么?我的目标是从键数组中获取对象数组:

['-Kx9pqoMWlJLbKLQcAkP', '-Kx9pqoOYlDHTJ64Was5'] => [{prop:'val'},{prop:'val2'}]

最佳答案

forkJoin 运算符要求所有源 Observable 至少发出一项完成

我不太了解 firebase,但我怀疑 valueChanges 永远不会完成,所以这就是为什么 forkJoin 从不发出任何东西。处理此问题的一种方法是使用 take(1) 始终完成链。

forkJoin(obj1.take(1), obj2.take(1)).subscribe(res => console.log(res);

也许在您的情况下,使用 zip() 运算符会更好,它只需要所有源 Observables 发出相同数量的项目。但是请确保您取消订阅它,因为它在其源 Observables 完成之前不会自行完成。

关于angular - forkJoin 不适用于 AngularFire2 valueChanges,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47790135/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com