【问题标题】:How do I use observable and observer in angular?如何在角度中使用可观察和观察者?
【发布时间】:2017-05-23 17:26:46
【问题描述】:

我来自同步编程背景,我很难理解 observables。

这是我的服务/提供者(Ionic 2 项目)的摘录

return this.http.get(`${this.serverApi}`)
  .map(res => <Response[]>res.json());

我将从LoginPage 订阅。我对此有几个问题。

  1. 即使我没有这样声明,上面的代码是否会返回 observable/observer?

  2. 响应是 JSON。如何对 JSON 进行一些检查/处理并执行一些操作,例如 if

    res.auth_token==true
    

    然后做

     localStorage.setItem(res.auth_token)
    

    我认为应该在提供程序类中完成。一个典型的提示/示例就很棒了。

  3. 请求在到达订阅方法时是否真的发生了?

  4. Creating and returning Observable from Angular 2 Service 提及主题和重播主题。我应该改用它们吗?

【问题讨论】:

  • 1.它返回 Observable.map 的结果,它本身就是一个 observable。 2. 再添加一个.map 或者在当前添加一个。 3.响应是在你.subscribe时做出的,是的,不仅仅是在你返回observable时。 4. 我认为在您当前的代码中没有必要这样做,但是......也许?

标签: javascript angular rxjs observable


【解决方案1】:
  1. 代码将返回Observable

  2. 您可以将回调主体更改为块并添加任意数量的代码

return this.http.get(`${this.serverApi}`)
  .map(res => {
     let x = <Response[]>res.json();
     // do something with x
     res.auth_token == true;
     return res; // with a block body an explicit`return` is required
  });
  1. 是的,调用.subscribe() 将执行http.get(),然后在响应到达时执行所有后续运算符。没有.subscribe(),什么都不会发生。

注意:某些 Angular API 需要 Observable,在这种情况下,您不能调用 subscribe(),因为 subscribe() 返回的是 Subscription,而不是 Observable

  1. 这取决于您尝试完成什么。如果你使用http.get(),你已经得到了一个 observable,不需要SubjectReplaySubject 或任何其他可能性。

【讨论】:

  • 谢谢。这很有意义。关于 ReplaySubject,我应该什么时候使用它?顺便说一句,我的应用程序发出 http 获取、发布、放置和删除请求。
  • ReplaySubject 如果稍后订阅的订阅者也应该接收所有先前发出的事件,则很有用。我现在不知道有什么好的用例,但我相信有很多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
  • 2021-09-25
  • 1970-01-01
  • 2011-06-17
  • 2014-03-24
相关资源
最近更新 更多