为什么我们要在Angular中使用subscribe()而不是map()?
我试图利用angular2中的可观测值,但我不明白为什么我应该使用为什么我们要在Angular中使用subscribe()而不是map()?,angular,typescript,rxjs,observable,angular-observable,Angular,Typescript,Rxjs,Observable,Angular Observable,我试图利用angular2中的可观测值,但我不明白为什么我应该使用map()而不是subscribe()。 假设我从webApi获取值,如下所示 this.http.get('http://172.17.40.41:8089/api/Master/GetAllCountry') 现在使用subscribe(success,error,complete)我可以获得成功回调上的所有值,并且可以返回完整回调上的值。如果我能完成所有这些功能,那么map()需要什么?这有什么好处吗 简而言之,为什么
map()
而不是subscribe()
。
假设我从webApi获取值,如下所示
this.http.get('http://172.17.40.41:8089/api/Master/GetAllCountry')
现在使用subscribe(success,error,complete)
我可以获得成功回调上的所有值,并且可以返回完整回调上的值。如果我能完成所有这些功能,那么map()
需要什么?这有什么好处吗
简而言之,为什么要这样写:
this.http.get('http://172.17.40.41:8089/api/Master/GetAllCountry')
.map(r=>{})
.subscribe(value => {
}, error => error, () => {
});
当他们不需要map函数就可以简单地写这篇文章时:
this.http.get('http://172.17.40.41:8089/api/Master/GetAllCountry')
.subscribe(value => {
}, error => error, () => {
});
如果您想要返回一个
可观察的
一些其他代码可以订阅,但您仍然想要在当前方法中操作数据事件,请使用map
可观察对象的实际用户需要subscribe()
,因为如果没有subscribe()
,可观察对象将根本无法执行。(forEach()
或toArray()
和其他人可能也会执行可观察的,而不是subscribe()
)
subscribe()
返回无法订阅的订阅,但可用于取消订阅
map()。如果只设置map
,则不会触发任何请求。你可以查一下
使用map
预处理您的数据是一种很好的做法,因为许多订阅者可以汇总您的结果。因此,您不必向每个客户机(订户)添加预处理,而可以为所有客户机准备单个输出和单个数据模式。将map视为转换响应的中间件
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)
subscribe用于调用observable,请阅读上的好文档。map()
是一个rxjs运算符,它将以数组[]
形式或.json()
形式显示结果
可观测数据是流,它们被设计成写在功能流中。您应该使用RxJS操作,因为它是实现可观测子部分的“功能”方式。通常,当我们在可观察流之外获取数据时,就会发生这种情况
这是一个强制同步工作的异步操作
bad_example() {
let id;
this.obs.subscribe(param => id = param['id']);
this.get(id).subscribe(elem => this.elem = elem);
}
这是一个异步操作,按预期工作。
(如溪流)
我已经更新了我的问题,请看一下。map(r=>{})将导致未定义的值。如果你在寻找一个合理的答案,请以合理的方式解释你的情况。
good_example() {
this.obs
.map(param => param['id'])
.switchMap(id => return this.get(id))
.subscribe(elem => this.elem = elem);
}