加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

forkJoin不适用于AngularFire2 valueChanges

发布时间:2020-12-17 17:29:40 所属栏目:安全 来源:网络整理
导读:请帮我解决一个我正在努力的问题. 我有一组Firebase对象键 const keys = ['-Kx9pqoMWlJLbKLQcAkP','-Kx9pqoOYlDHTJ64Was5'] 我要做的是使用forkJoin将所有Firebase对象放在一个流中.这就是我所拥有的: const obj1 = this.fbService.getObj(keys[0]);const o
请帮我解决一个我正在努力的问题.

我有一组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()运算符,只需要所有源Observable发出相同数量的项.但是请确保取消订阅,因为在源Observables完成之前它不会完成.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读