有没有一种方法可以为诺言提供默认的errorCallback,以便如果用户提供了errorCallback,则不会调用默认的errorCallback。

function getFoo() {
    // TODO magic goes here to setup defaultErrorCallback as default
    return $http.get("/not_exists");
};

function defaultErrorCallback() { console.log("DDD"); }
function customCallback() { console.log("CCC"); }

getFoo().then(fooSuccess);
// output: DDD

getFoo().then(fooSuccess, customCallback);
// output: CCC

最佳答案

我不相信有一种方法可以对单个的诺言做到这一点,但是有可能override Angular's default error handling在Angular1.6中应该只处理未在其他地方捕获的错误:

angular.
  module('exceptionOverwrite', []).
  factory('$exceptionHandler', ['alertService', function(alertService) {
    return function myExceptionHandler(exception, cause) {
      alertService.alertError(exception, cause);
    };
  }]);


如果要添加处理以专门处理getFoo()中的错误,则可以让getFoo()向错误中注入一些信息以使其可识别:

function getFoo() {
    return $http.get("/not_exists")
        .catch(function (error) {
            error.errorSource = 'getFoo';
            throw error;
        });
}

// elsewhere...
angular.
  module('exceptionOverwrite', []).
  factory('$exceptionHandler', ['alertService', function(alertService) {
    return function myExceptionHandler(exception, cause) {
      if(exception.errorSource = 'getFoo') {
        alertService.alertError(exception, cause);
      } else {
        // default error handling
      }
    };
  }]);

关于javascript - 是否可能有一个默认的errorCallback来保证?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42850080/

10-10 00:26