Angular Http - toPromise或subscribe

时间:2016-09-01 07:41:40

标签: angularjs angular angular2-services

我在Angular上观看了一些课程,并发现有不同的方法来管理来自Http请求的数据。

  • 使用Observables,.map().subscribe()
  • 使用承诺,.toPromise().then().catch()

我在我的应用程序中使用toPromise(),因为我发现它类似于AngularJS Http服务。

在什么情况下我需要使用Observables?

3 个答案:

答案 0 :(得分:17)

如果您喜欢反应式编程风格并希望在应用程序中保持一致,即使对于单个事件(而不是事件流)也始终使用可观察对象,然后使用可观察对象。如果这对您不重要,请使用toPromise()

可观察的一个优点是,您可以取消请求。

另见Angular - Promise vs Observable

答案 1 :(得分:1)

我认为,只要响应不是您要使用的数据流,那么最好使用.toPromise()方法,因为继续收听您不响应的响应是没有意义的不需要,甚至都不会改变。

答案 2 :(得分:0)

默认的http请求以角度发出可观察到的。可以通过调用toPromise()将其转换为Promise。但这不是必需的。通过调用

解决后,Angular取消订阅http请求
addUsers(y): Observable<any> {
  return this.http.get<any>("https://jsonplaceholder.typicode.com/todos/"+y);
} 
  

可观察的事物是可以取消的,但是诺言却不能。

即使在销毁组件导致内存泄漏之后,打开请求仍会保留,这可以通过取消订阅可观察对象或在销毁组件后调用destroy方法来防止。 Ways to unsubscribe to prevent memory leaks

结论,最好将可观察变量与内存泄漏预防技术结合使用。