我有以下返回 promise 的 TypeScript
方法:
public loadSavedLogin(): ng.IPromise<MyApp.Models.User> {
return this._myAppService.getUser(this.savedUserId).then((result: MyApp.Models.User) => {
if (result) {
this.userId = result.UserID;
this.userName = result.UserName;
}
return result;
}, (error) => {
this._isAuthError = true;
return error;
}
);
}
我遇到的问题是在 promise 的 error
回调中。上游对该方法的调用也依赖于一个 promise ,因此如果错误没有正确冒出,则上游 promise 将无法正常运行。我找到了一个hackish 解决方案:
(error) => {
try {
this._isAuthError = true;
return error;
} catch (e) {
//If any error occurred above make sure to still throw
throw error;
} finally {
//Allow upstream promises to continue as expected
throw error;
}
}
这行得通,但看起来、感觉起来,可能全都错了。我觉得我在处理和冒泡 promise 中的错误时缺少正确的实现。必须有一种更正确的方法来处理 this promise 中的错误函数,就像我所做的那样,但仍然允许上游 promise 调用此方法在处理时也能正常工作他们自己的误差函数。
如何在没有一系列骇人听闻的 throw
语句的情况下让错误冒泡?
注意:返回错误并抛出似乎是多余的,但如果我不返回值,我正在使用的 IPromise
接口(interface)将无法编译.这就是我返回并抛出错误的原因。
注意: 我阅读了大量关于使用 promises 处理错误的问题,但没有一个能回答我提出的关于防止我采取的 hackish 方法的问题。
最佳答案
我不熟悉 TypeScript,但这是一个 javascript 解决方案,您可以在其中使用 $q.reject
.then(function() {},
function(error) {
this._isAuthError = true;
return $q.reject(error);
});`
关于javascript - 如何在不抛出错误的情况下从 Promise 中正确冒泡错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26750330/