【发布时间】:2018-02-23 23:24:18
【问题描述】:
我正在学习 Angular2,并希望对服务中的方法进行正确的错误处理。
出于测试目的,我更改了 API,因此我得到了一个无效的测试结果。我想拒绝 Promise ("Received unexcepted data.") 并将错误消息存储在我的角度组件中。
我的服务方式:
getBlocks(): Promise<Block[]> {
return this.http.get(this.serviceUrl)
.toPromise()
.then(response => {
if (response.json() instanceof Array) {
return response.json() as Block[];
} else {
Promise.reject('Received unexpected data.');
}
})
.catch(this.handleError);
}
private handleError(error: any): Promise<any> {
console.log('An error occurred in MyService', error);
return Promise.reject(error.message || error);
}
我调用服务的组件:
getBlocks(): void {
this.myService.getBlocks().then(blocks => {
this.blocks = blocks;
}, error => {
console.log('fail callback');
this.error = error;
}).catch(e => {
console.log('catch');
this.error = e;
});
}
我尝试实现 promise 的失败回调,但我的应用不断崩溃
错误错误:未捕获(承诺):收到意外数据。
所以有我的错误消息,但它没有在我的组件中得到正确处理。如何正确地从服务中捕获我的 Promise.reject(),以便我可以将错误存储在 this.error 变量中。
补充问题: 我已经实现了 then() 调用的成功和失败回调。之后的 catch() 是否必要?还是应该只在没有失败回调的情况下完成?还是这两种情况没有可比性?
【问题讨论】:
标签: angular typescript error-handling promise