可观察的未定义

时间:2017-01-30 21:37:09

标签: angular typescript rxjs

我正在尝试从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 undefinedAngular 2 return data from service is not availabe after RxJs subscribe

我通过哪里回答了他们的问题。我错过了什么?

1 个答案:

答案 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中完成一样,或者将代码移动到其中一个回调中。