我在Angular 2中的两个单独的observable上有两个顺序订阅的问题。 我想:
我这样做的方式是我认为错了:
this._locationService.geocode(this.location.latitude, this.location.longitude).
subscribe(position => {
this.location.city = this.findAddressPart(position, "locality", "long");
this.location.country = this.findAddressPart(position, "country", "long");
this._locationService.updateLocation(this.location)
.subscribe(
location => {
this.location = location;
this.submitted = true;
this.submitting = false;
}
);
});
这样我的DOM在实际获取位置后只会更新5-10秒。
答案 0 :(得分:0)
您的解决方案需要多长时间才能更新。不幸的是,除非您重新构建_locationService
使用数据的方式,否则无法解决此问题。目前你有:
有两个链接在一起的请求。如果可能的话,我会将这两个函数合并到你后端的一个调用中,这样你就可以调用类似
的东西this._locationService.geocode(this.location.latitude, this.location.longitude).
subscribe(location => {
this.location = location;
this.submitted = true;
this.submitting = false;
});
当然,只有当您的服务器包含用于提供此类请求的数据时,这才有效。如果您的服务器也必须进行HTTP调用,那么将其更改为上述内容将没有实际意义。
如果无法满足上述要求,您可以在第一个请求完成后更新DOM。如果一切顺利,updateLocation
函数将返回发送到服务器的相同位置,对吧?您可以使用本地可用值更新DOM,而不是在第二个函数成功时更新DOM,只有在出现错误时才更改它们。这将使您的响应时间看起来快50%。这样的事情。
this._locationService.geocode(this.location.latitude, this.location.longitude).
subscribe(position => {
this.location.city = this.findAddressPart(position, "locality", "long");
this.location.country = this.findAddressPart(position, "country", "long");
// SET DOM HERE using this.location values
this._locationService.updateLocation(this.location)
.subscribe(
location => {
this.location = location;
// optionally SET DOM HERE again
this.submitted = true;
this.submitting = false;
},
error => {
// SET DOM HERE reflecting error
}
);
});