2017-05-30 8 views
0

In meiner Ionic2 App habe ich einen Dienst, der alle HTTP-Anfragen behandelt. Ich habe einen Alarm-Controller, wenn ein Fehler in http-Aufruf auftritt. Bei einem Klick in diese Warnung möchte ich diesen Anruf erneut ausführen. Ich kann es jetzt tun. Das Problem besteht darin, dass die Antwort nicht auf die Seite aufgelöst wurde, von der die Funktion aufgerufen wurde.Fehler in http Anrufe in ionic 2

-Code in Service:

loadCity(){ 
return new Promise(resolve => { 
this.http.get(url).map(res=>res.json()) 
.subscribe(data => {resolve(data)}, 
err => { this.showAlert(err); } 
}); 
} 

showAlert(err: any){ 
// code for alert controller, I am only writing handler of alert 
//controller refresh button 
handler => {this.loadCity();} 
} 

-Code in CityPage

showCity(){ 
this.cityService.loadCity() 
.then(data => {//process data}); 
} 

Handler ruft erneut Funktion aber diesmal Versprechen ist nicht auf CityPage showCity() Funktion aufgelöst.

Antwort

5

Wenn ein Fehler in der http-Anforderung auftritt, wird die Fehlerrückruffunktion aufgerufen, aber Sie lösen die Ablehnung weder auf noch weisen sie sie zurück.

Sie können so etwas wie

loadCity(){ 
    return new Promise((resolve, reject) => { 
     this.http.get(url).map(res=>res.json()) 
     .subscribe(
      data => {resolve(data)}, 
      err => { 
       this.showAlert(err); 
       reject(err); 
      } 
     }); 
    } 
} 

und in dem Anrufer

showCity(){ 
    this.cityService.loadCity() 
    .then(data => { 
     //process data 
    }) 
    .catch(error => { 
     //some error here 
    }) 
} 

tun können Sie bessere Beispiele in den docs sehen.

+0

Danke, es hat funktioniert. Mein schlechtes, ich bin neu und ich codierte, ohne Grundlagen zu kennen. –