【问题标题】:Chaining two observables http and storage链接两个 observables http 和 storage
【发布时间】:2016-09-11 09:42:33
【问题描述】:

我正在尝试链接两个可观察对象。我正在使用 Ionic2 框架。第一个 observable 尝试从移动设备获取访问令牌,然后第二个 observable 然后使用该访问令牌调用 api。但是由于某种原因,即使我订阅了链,第二个 observable 也永远不会被调用。

我错过了什么?

this.observableChain = Observable.fromPromise(this.storage.get('accessToken'))
  .map(accessToken => this.http.post('http://1234/user/login', {'accessToken': accessToken}))
  .subscribe(function(result) {
    console.log(result);
  }, function(error) {
    console.log(error);
  });

提前致谢。

【问题讨论】:

  • 你试过flatMap()而不是map()吗?
  • Flatmap 已修复它。非常感谢。你能解释一下为什么这会解决它吗?
  • 我可以尝试解释一下,但我自己只是在使用 Ionic2 学习 Observables,所以希望这个链接对你有所帮助 - reactivex.io/documentation/operators/flatmap.html。简单的规则是,如果您需要返回另一个 observable 的流(或者在您的情况下发出另一个 http 请求),那么 flatMap() 是您的朋友。如果您愿意,我可以将其发布为答案。
  • 继续吧。感谢您提供有意义的链接。

标签: javascript angular ionic2 observable chaining


【解决方案1】:

链接可观察对象时,您需要使用flatMap()

Observable.fromPromise(this.storage.get('accessToken'))
    .flatMap(accessToken => 
        this.http.post('http://1234/user/login', {'accessToken': accessToken})
    )
    .subscribe(
        result => console.log(result), 
        error => console.log(error)
    );

在这里可以找到对这个概念的一个很好的解释 - http://reactivex.io/documentation/operators/flatmap.html

【讨论】:

    【解决方案2】:

    你已经订阅了,但是没有订阅链这回事。你的第一个 observable 发出一个 observable,它永远不会被订阅。基本上你必须这样做:

    obs1.subscribe(obs2 => obs2.subscribe(result => ...))
    

    HTH

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多