【问题标题】:Nested observables subscription嵌套的 observables 订阅
【发布时间】:2016-11-21 16:08:25
【问题描述】:

我有以下代码:

getUsers() {
    this.af.database.list(DB_URL)
    .map((users) => {
      return users.map((user) => {
        user.data = this.af.database.object(DB_URL_2).take(1);
        return user;
      });
    })
    .take(1)
    .subscribe((itemPrefs) => {
      this.users = users;
    })
  }

返回users 数组,其中user.data 是可观察的(用户信息)。

如何将user 的数据作为对象而不是作为可观察对象返回?我尝试订阅我的user.data,但它仍然返回 observable:

return users.map((user) => {
            user.data = this.af.database.object(DB_URL_2).take(1)
.subscribe((data) => {
return data;
});
        return user;
      });

【问题讨论】:

    标签: angular rxjs observable angularfire2


    【解决方案1】:

    我认为selectMany 应该可以解决问题,selectMany(RxJS4) mergeMap(RxJS 5) 的每个内部函数都会返回 observable,这将变平。这意味着它将确保所有内部data 都将变平。

    代码

    getUsers() {
        this.af.database.list(DB_URL)
        .mergeMap((user, i) => {
            return this.af.database.object(DB_URL_2).take(1).map(data => {
               user.data = data;
               return user;
            });
          });
        })
        .take(1)
        .subscribe((itemPrefs) => {
          this.users = users;
        })
    }
    

    【讨论】:

    • 知道如何在 Angualr 2 中导入 selectMany 运算符吗?我试过import 'rxjs/add/operator/selectMany';
    • @TheUnreal 我猜应该是import { Observable } from 'rxjs/Observable'
    • Property 'selectMany' does not exist on type 'FirebaseListObservable<any[]>'.
    • @TheUnreal 很抱歉给您带来不便,selectManyrxjs4 中使用,因为我们使用的是RxJS5,所以它变成了mergeMap。请让我知道它是否适合您。
    • @TheUnreal 你能否确认它对你有用吗?
    猜你喜欢
    • 2022-01-24
    • 2017-08-10
    • 2018-12-20
    • 2021-05-10
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-09
    相关资源
    最近更新 更多