2017-05-30 60 views
0

在我的Ionic2应用程序中,我有一个处理所有http请求的服务。 当http调用发生任何错误时,我有一个提醒控制器。在按钮上单击此警报时,我想再次运行该呼叫。我现在能够做到。问题是响应没有解析到从哪个函数被调用的页面。离子中的http调用中的处理错误2

代码服务:

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();} 
} 

守则CityPage

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

处理程序再次调用功能,但这个时候的承诺下不了决心CityPage showCity()函数。

回答

5

当http请求发生错误时,会调用错误回调函数,但您既不解决也不拒绝承诺。

你可以做这样的事情

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

,并在呼叫者

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

你可以看到在docs更好的例子。

+0

谢谢,它的工作。我的坏,我是新的&我编码不知道基本知识。 –