我在angular 2项目中有一个函数,它通过api从数据库中获取数据。我创建了以下函数,将数据成功存储在变量" ReqData "已被指定为类型" 任何 "。
this._visitService.getchartData().subscribe(data =>
{ this.ReqData = data
console.log("ISubscribe", this.ReqData );
});
console.log("OSubscribe", this.ReqData );
this.ImpoData = this.getData( this.ReqData);
但问题是虽然数据可以在订阅中成功传递,但调用subscribe之外的值会给出输出 undefined 。有没有办法在订阅之外使用数据。
答案 0 :(得分:2)
实际上,this.ReqData
已经可以在组件中的任何位置访问。但是你只需要确保只在调用了subscribe中的代码之后才调用它,这是this._visitService.getchartData()
检索数据的时候。这是因为订阅内的代码将异步执行。
如果您想直接使用该值,只需在订阅块
中执行 this._visitService.getchartData().subscribe(data =>
{ this.ReqData = data
console.log("ISubscribe", this.ReqData );
this.ImpoData = this.getData( this.ReqData);
});
//Here this.ReqData is not defined
编辑:如果您真的想在subscribeblock之外使用该值,可以将observable转换为promise并使用await / async模式
import 'rxjs/add/operator/toPromise';
//...
async yourMethod()
{
try
{
this.ReqData = await this._visitService.getchartData().toPromise();
//Here this.ReqData is accessible
this.ImpoData = this.getData( this.ReqData);
}
catch(e)
{
//Handle your error here
}
}