我正在尝试从observable中提取值,我的订阅(组件)代码如下:
this.checkoutService.getDisabledDate().subscribe
(dates=>{this.formattedDate=dates},
(error:any)=>{console.log(error)});
在'dates'回调中,this.formattedDate的console.log打印正确的值。但是,尝试在订阅之外访问this.formattedDate是未定义的。
服务代码:
getDisabledDate():Observable<any>{
let headers = new Headers({'Content-Type': 'application/json' });
let options = new RequestOptions({headers:headers});
let userRequest={action_id:0};
let disabledDate={};
return this.http
.post(this.deliveryUrl,userRequest,options)
.map((r:Response)=>r.json())
.catch(this.handleError);
}
我使用short form()执行了在queryParam上传递数据的相同操作,在这种情况下它没有任何区别。我似乎忽略了用这个提取信息所需要的东西。
我看过两个: Angular2 HTTP using observables subscribe showing data undefined 和 Angular 2 return data from service is not availabe after RxJs subscribe
我通过哪里回答了他们的问题。我错过了什么?
答案 0 :(得分:1)
从你的问题中不清楚“外部”是什么,但如果它是在你获得Observable
的电话之后,那么这是预期的行为
someMethod() {
this.checkoutService.getDisabledDate()
.subscribe(
// anything here is executed sometimes later when the response from the server arrives
dates=>{
this.formattedDate=dates;
// code that depends on the result goes here
},
(error:any)=>{console.log(error)}
);
// this is executed first
}
您无法获得subscribe
之外的值。您可以使用map
并返回调用者的结果进行订阅,就像在getDisabledDate
中完成一样,或者将代码移动到其中一个回调中。