【问题标题】:Use last element of Observable使用 Observable 的最后一个元素
【发布时间】:2016-12-02 22:59:46
【问题描述】:

我有一个 Observable 从 Firebase 获取一些数据(使用 AngularFire2),类似这样(我不需要更改流,只需要最后一个):

this.items = this.af.database.list('/items').take(1);

然后(在另一个通常在数据到达时调用的函数中)我想处理结果,例如这样:

this.items.last().do(items => {
  console.log('items from server',items);
});

但这不起作用(它不会在控制台日志中产生任何内容)。

如何使用 Observable 的最新结果?

【问题讨论】:

  • 考虑使用BehaviorSubject,它有getValue方法。

标签: angular firebase firebase-realtime-database rxjs


【解决方案1】:

你的 observable 是冷的(没有订阅),你需要添加一个:

this.items.last().do(items => {
  console.log('items from server',items);
}).subscribe();

或者更好的是,将do 替换为subscribe

【讨论】:

  • 我可以做类似this.items.subscribe().filter(.....).map(.....)的事情吗?我希望结果继续成为 Observable。
  • 订阅排在最后。所以它是this.items().filter().map().subscribe(),不仅你可以,这是 rxjs 的方法:-)
【解决方案2】:

你必须订阅你的 observable。此外,您的 take(1) 只会抓取第一项。我假设您的“/items”中有不止一项。

Here 是一个关于可观察操作如何工作的好网站。

【讨论】:

  • 实际上take(1) 抓取了所有项目(在那个时间点)。感谢您的链接。
  • 是的,你绝对是对的,我的错!哈哈。看这些东西太早了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
  • 2012-04-02
  • 1970-01-01
  • 2013-02-06
  • 2012-04-08
  • 1970-01-01
  • 2015-10-19
相关资源
最近更新 更多