Ionic2 离子2中的Http请求

Ionic2 离子2中的Http请求,ionic2,Ionic2,我是爱奥尼亚框架的新手&我将开发一个应用程序,它利用我服务器上的restapi。在每个API中,我必须在http头中传递一个令牌。如果此令牌有效,则返回响应并对listview进行充气。若令牌无效,那个么我必须点击另一个API来生成令牌&再次点击第一个API来获取数据 我的问题是第二种情况。当令牌无效时,它会成功生成&然后调用第一个API也会成功,但这次listview没有膨胀。 请帮忙 home.ts loadPeople(){ this.dataService.load() .then(d

我是爱奥尼亚框架的新手&我将开发一个应用程序,它利用我服务器上的restapi。在每个API中,我必须在http头中传递一个令牌。如果此令牌有效,则返回响应并对listview进行充气。若令牌无效,那个么我必须点击另一个API来生成令牌&再次点击第一个API来获取数据

我的问题是第二种情况。当令牌无效时,它会成功生成&然后调用第一个API也会成功,但这次listview没有膨胀。 请帮忙

home.ts

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&param2=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&param2=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';