javascript - 如何在不抛出错误的情况下从 Promise 中正确冒泡错误?

标签 javascript angularjs typescript

我有以下返回 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/

相关文章:

javascript - 占据屏幕全宽的表单

javascript - 在Highchart中,为什么饼图的钻取数据颜色不同?

javascript - 简化使用 $q.defer() promise 链接的 Angular 函数

javascript - 如何在不带引号的情况下将值放入 JSONObject

javascript - 从页面外动画 SVG

angularjs - 将 ng-click 参数对象键绑定(bind)到作用域属性?

html - 如何从表格中删除框阴影?

typescript - 如何使这个通用 TypeScript 函数按预期工作?

javascript - 如何在 Javascript 中使用已编译的 TypeScript 类

Typescript:区分条件类型中的泛型联合