Ionic2 离子2中的Http请求
我是爱奥尼亚框架的新手&我将开发一个应用程序,它利用我服务器上的restapi。在每个API中,我必须在http头中传递一个令牌。如果此令牌有效,则返回响应并对listview进行充气。若令牌无效,那个么我必须点击另一个API来生成令牌&再次点击第一个API来获取数据 我的问题是第二种情况。当令牌无效时,它会成功生成&然后调用第一个API也会成功,但这次listview没有膨胀。 请帮忙 home.tsIonic2 离子2中的Http请求,ionic2,Ionic2,我是爱奥尼亚框架的新手&我将开发一个应用程序,它利用我服务器上的restapi。在每个API中,我必须在http头中传递一个令牌。如果此令牌有效,则返回响应并对listview进行充气。若令牌无效,那个么我必须点击另一个API来生成令牌&再次点击第一个API来获取数据 我的问题是第二种情况。当令牌无效时,它会成功生成&然后调用第一个API也会成功,但这次listview没有膨胀。 请帮忙 home.ts loadPeople(){ this.dataService.load() .then(d
loadPeople(){
this.dataService.load()
.then(data => {
this.mylist = data;
});
}
数据提供者
load() {
if (this.data) {
return Promise.resolve(this.data);
}
return new Promise(resolve => {
let headers = new Headers({ 'token': this.token });
let options = new RequestOptions({ headers: headers });
this.http.get('myurl1', options)
.map(res => res.json())
.subscribe(data => {
if(data.message === 'TOKEN_NOTVALID'){
this.generateToken();
}else{
this.data = data.result;
resolve(this.data);
}
});
});
}
generateAccessToken{
var creds = "param1=xxx¶m2=zzz";
var headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
this.http.post('myUrlHere', creds, {
headers: headers
})
.map(res => res.json())
.subscribe(
data => {
this.token = data.token;
this.load();
});
}
问题是,当令牌无效时,承诺永远不会被解析。只有第二次调用load函数承诺才会被解析。因此,当令牌无效时,您需要解析承诺。仅仅因为函数的名称在承诺中被解析,并不意味着第二次调用load函数将解析第一次调用load函数功能 您可以在generateAccessToken中返回数据承诺,然后使用返回的数据解析该承诺
load() {
if (this.data) {
return Promise.resolve(this.data);
}
return new Promise(resolve => {
let headers = new Headers({ 'token': this.token });
let options = new RequestOptions({ headers: headers });
this.http.get('myurl1', options)
.map(res => res.json())
.subscribe(data => {
if(data.message === 'TOKEN_NOTVALID'){
this.generateToken().then(data => { resole(data) } );
}else{
this.data = data.result;
resolve(this.data);
}
});
});
}
generateAccessToken(){
var creds = "param1=xxx¶m2=zzz";
var headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
return this.http.post('myUrlHere', creds, {
headers: headers
})
.map(res => res.json())
.toPromise()
.then(
data => {
this.token = data.token;
return this.load();
});
}
你必须进口才能获得许可
感谢您的回复,但类型“void”错误上不存在“then”。
import 'rxjs/add/operator/toPromise';