gpt4 book ai didi

javascript - 从 Angular 组件中的服务捕获 promise 中的错误

转载 作者:行者123 更新时间:2023-11-30 14:24:56 25 4
gpt4 key购买 nike

大家好,我在 Angular 中创建的邮政服务遇到了问题。当我调用该服务时,努力从我的组件中捕获错误。我能够从服务中捕获错误,但我需要从我的组件中执行此操作才能正确处理错误。任何建议将不胜感激。

服务

sendData(obj) {
let promise = new Promise((resolve) => {
this.http.post(this.URL, obj, this.httpOptions)
.toPromise()
.then(
res => {
console.log(res);
resolve(res);
}
)
//.catch((err) => {
// console.log(err);
// throw err;
//});
});
return promise;
}

组件

this._myservice.sendData(this.myobj)
.then(function (res) {
console.log('data sent');
})
.catch(error => {
console.warn('from component:', error);
// this console warn never gets logged out
});

我是否需要更新我的服务中的某些内容以允许我从组件中捕获错误?

最佳答案

您正在创建自己的 Promise在这里,但你永远不会调用 reject如果Promise你正在包装 拒绝(抛出错误)。这被称为 the new Promise antipattern .在你的情况下,你可以简单地删除这个包装器并替换对 resolve 的调用。用return为了实现你所需要的,像这样:

sendData(obj) {
return this.http.post(this.URL, obj, this.httpOptions)
.toPromise()
.then(res => {
console.log(res);
return res;
});
}

为了提供更多上下文,您可以通过调用 reject修复您的原始问题。 .这看起来像这样:

// DONT'T DO THIS
sendData(obj) {
let promise = new Promise((resolve, reject) => {
this.http.post(this.URL, obj, this.httpOptions)
.toPromise()
.then(res => {
console.log(res);
resolve(res);
})
.catch((err) => {
console.log(err);
reject(err); // Here.
});
});
return promise;
}

但是,正如我上面所说,这过于复杂且没有必要。我希望它展示了 Promise您的组件有权访问永远不会看到 HTTP 调用中发生的错误。

关于javascript - 从 Angular 组件中的服务捕获 promise 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52092659/

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