gpt4 book ai didi

angular - 如何在Angular2中拒绝Promise和处理/捕获错误

转载 作者:行者123 更新时间:2023-12-03 08:05:11 24 4
gpt4 key购买 nike

我正在学习Angular2,想对服务中的方法进行正确的错误处理。

为了进行测试,我更改了API,以便获得无效的测试结果。我想拒绝Promise ("Received unexcepted data.")并将错误消息存储在我的 Angular 组件中。

我的服务方式:

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的失败回调,但是我的应用始终崩溃

ERROR Error: Uncaught (in promise): Received unexpected data.



所以有我的错误消息,但是没有在我的组件中正确处理。我如何正确地从服务中捕获Promise.reject(),以便将错误例如存储在 this.error变量内。

附加问题:
我实现了then()调用的成功和失败回调。那之后是否有必要catch()?还是应该仅在没有故障回调的情况下进行?还是这两种情况不具有可比性?

最佳答案

如果要在catch子句中捕获错误,则只需要:

throw new Exception("received unexpected...");

而不是拒绝 promise 。

Promise.reject()具有用于处理拒绝的文档。如果这是您想要的,则应返回Promise.reject,以便任何期望 promise 的人都能兑现。

关于angular - 如何在Angular2中拒绝Promise和处理/捕获错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46228206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com