如何在角度中使用可观察和观察者?

时间:2017-01-09 12:36:41

标签: javascript angular rxjs observable

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

以下是我的服务/提供商(Ionic 2项目)的摘录

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

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

  1. 即使我没有声明,上述代码是否会返回一个可观察/观察者?

  2. 响应是JSON。如何检查/处理JSON并执行某些操作,如果

    res.auth_token==true
    

    然后做

     localStorage.setItem(res.auth_token)
    

    我认为应该在提供者类中完成。只是一个典型的提示/示例将是很棒的。

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

  4. Creating and returning Observable from Angular 2 Service提到了Subject和ReplaySubject。我应该使用它们吗?

1 个答案:

答案 0 :(得分:3)

  1. 代码将返回Observable

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

  3. 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()就不会发生任何事情。
    2. 注意:某些Angular API需要Observable,在这种情况下,您不得致电subscribe(),因为subscribe()会返回Subscription,而不是Observable

      1. 这取决于你想要完成的事情。如果您使用http.get(),则您已经获得了观察结果,并且不需要SubjectReplaySubject或任何其他可能性。