为什么我们要在Angular中的map()上使用subscribe()?

Lij*_*raj 50 observable rxjs typescript angular angular-observable

我想利用在angular2观测和糊涂了,为什么我应该使用map()subscribe().假设我从webApi获取值,就像这样

  this.http.get('http://172.17.40.41:8089/api/Master/GetAllCountry')
Run Code Online (Sandbox Code Playgroud)

现在使用subscribe(success, error, complete)我可以获得成功回调的所有值,我可以返回完整回调的值.如果我可以做所有这些功能,那么需要map()什么?它有什么优势吗?

简而言之,为什么人们应该这样写:

this.http.get('http://172.17.40.41:8089/api/Master/GetAllCountry')
    .map(r=>{})
    .subscribe(value => {
    }, error => error, () => {
});
Run Code Online (Sandbox Code Playgroud)

当他们可以简单地写这个没有map函数:

this.http.get('http://172.17.40.41:8089/api/Master/GetAllCountry')
    .subscribe(value => {        
    }, error => error, () => {           
});
Run Code Online (Sandbox Code Playgroud)

Gün*_*uer 80

如果要返回Observable一些其他可以订阅的代码,但是您仍然希望在当前方法中操纵数据事件,请使用map.

observable的实际用户需要subscribe(),因为没有subscribe()observable将根本不执行.(forEach()或者toArray()也许其他人也可以执行observable而不是subscribe())

subscribe()返回Subscription无法订阅的,但可用于取消订阅.

map()返回Observable可以订阅的.

  • 为了补充答案,“map”中的操作是异步执行的,而“subscribe”中的操作是同步执行的。在“map”调用中执行尽可能多的工作可以提高性能,尽管在大多数情况下可能不是很大。 (2认同)

A.T*_*.T. 32

将地图视为转换响应的中间件.

this.http.get('http://172.17.40.41:8089/api/Master/GetAllCountry')
.map(r=>r.json())
 .subscribe(result => {
              // here result would have json object that was parsed by map handler...
            },failurCallback,completeCallback)
Run Code Online (Sandbox Code Playgroud)

subscribe用于调用observable,请阅读关于cold-vs-hot-observables的好文档


Vad*_*imB 12

您需要subscribe运行异步请求.如果你刚设置map- 没有请求会触发.你可以检查一下.

map用于预处理数据的良好做法,因为许多订阅者可以使用您的结果.因此,不是向每个客户端(订户)添加预处理,而是可以为所有客户端准备单个数据模式的单个输出.