离子 2 返回 { "__zone_symbol__state" :空, "__zone_symbol__value" : "cyprus" }



>我在一个名为 api-serive.ts 的提供程序页面中有我的函数

//get city in profile 
getCityInProfile(){
return new Promise((resolve, reject) => {
let headers = new Headers({ 'Authorization':  
localStorage.getItem('token') });
this.http.get(this.getProfile,{headers:headers}).subscribe(
(res) => {
console.log (res.json().profile.location)
resolve(res.json().profile.location)
return  (resolve(res.json().profile.location));
},(err) => {
reject(err);
}); 
})
}

当我在另一个 page.ts 中调用此函数以在我的配置文件中获取城市时,它会返回以下内容:

{"__zone_symbol__state":null,"__zone_symbol__value":"塞浦路斯"}

这就是我在我的页面中称呼它的方式。

CityInProfile(){ console.log (JSON.stringify(this.jobsServiceProvider.getCityInProfile() )+ "返回") this.cityProfile=this.jobsServiceProvider.getCityInProfile(); }

值在那里(塞浦路斯),但为什么以这种方式返回

您必须记住,服务以异步方式获取数据,因此您必须等待该数据准备就绪。

如果您不介意,我会对您的代码进行一些小的更改:

// Get city in profile 
getCityInProfile(): Promise<any> {
// First get the token from the localStorage (it's async!)
return localStorage.getItem('token').then(token => {
// Set the token in the header
let headers = new Headers({ 'Authorization':  token });
// Make the request, but don't subscribe here!
return this.http.get(this.getProfile, { headers:headers })
.map(res => res.json())
.map(resJson => resJson.profile.location)
.toPromise();
});
}

然后,当您想使用该服务时,您需要这样做:

public getCityInProfile(): void {
// Use the 'then' to wait for the response to be ready
this.jobsServiceProvider.getCityInProfile().then(city => {
// Now you can use the city returned by the service
console.log(`Returned: ${city}`);
this.cityProfile = city;
});
}

相关内容

  • 没有找到相关文章

最新更新