【发布时间】:2014-11-05 05:31:36
【问题描述】:
我有以下 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 回调。对该方法的上游调用也依赖于一个承诺,因此如果错误没有正确冒泡,上游承诺就不能正常工作。我找到了一个 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;
}
}
这行得通,但看起来、感觉起来,而且可能全都错了。在处理和冒泡承诺中的错误时,我觉得我错过了正确的实现。正如我所做的那样,必须有一种更正确/正确的方法来处理 this 承诺中的错误函数,但仍然允许上游承诺在处理时对该方法的调用也能正常工作他们自己的错误函数。
如果没有一系列骇人听闻的throw 语句,如何让错误冒泡?
注意:返回错误并抛出似乎是多余的,但是如果我不返回值,我正在使用的IPromise 接口将无法编译。这就是我返回并抛出错误的原因。
注意:我阅读了大量关于使用 Promise 处理错误的问题,但没有一个回答我所问的关于防止我采取的骇人听闻的方法的问题。
【问题讨论】:
标签: javascript angularjs typescript