【发布时间】:2017-01-30 21:37:09
【问题描述】:
我正在尝试从 observable 中提取值,我的订阅(组件)代码如下:
this.checkoutService.getDisabledDate().subscribe
(dates=>{this.formattedDate=dates},
(error:any)=>{console.log(error)});
在“日期”回调中,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);
}
我已经执行了相同的操作,使用短格式 () 通过 queryParam 传递数据,在这种情况下它没有任何区别。我似乎忽略了用这个提取信息所必需的。
我看过两个: Angular2 HTTP using observables subscribe showing data undefined 和 Angular 2 return data from service is not availabe after RxJs subscribe.
我通过了他们的问题得到回答的地方。我错过了什么?
【问题讨论】:
-
您是如何尝试访问这些数据的?在你看来?如果是这种情况,您是否像在一个答案中建议的那样使用 *ngIf?
-
听起来您正试图在数据可用之前对其进行访问。它仅在可观察对象为其返回值之后才可用。您确定 observable 正在返回,即在您尝试访问它之前正在调用
{this.formattedDate=dates吗?这是我对您问题的最佳猜测。 -
从技术上讲,这是对如何从异步函数返回值的欺骗。
-
不幸的是,Jared 的答案太简单了,甚至不能被视为该线程的副本。我只是对我的数据不耐烦了。
标签: angular typescript rxjs