javascript - .then() 中的错误处理程序不会被触发,除非使用 .success 和 .error

标签 javascript angularjs promise

我正在编写一个函数来处理来自 Angular $http 的结果。在我的 $http 请求中,我使用 .then() 来处理结果。

var GET = function (url) {
  return $http({
    method: 'GET',
    url: url
  }).then(
  function (data) {
    return data.data;
  },
  function (data) {
    return data.data;
  });
};

然后我从另一个函数调用 GET 函数,如下所示:

var initializeUsers = function () {
  return dbService.GET(serverUrl + dbResource).then(
  function (data) {
      // Some code to handle success
  },
  function (data) {
    // Some code to handle error
  });
};

这就是问题所在:如果 HTTP 请求中有错误,错误处理程序将在 GET 函数中进行处理。但是,当 initializeUsers 运行时,不会触发错误处理程序,而是触发成功处理程序。所以错误不会“冒泡”起来,这是应该的

但是,如果我不在 GET 函数中使用 .then,而是使用 .success.error,如下所示:

var GET = function (url) {
  return $http({
    method: 'GET',
    url: url
  }).success(
  function (data) {
    return data.data;
  }).error(
  function (data) {
    return data.data;
  });
};

它在 initializeUsers 中工作正常。但是,如果我随后使用 .then 从另一个函数调用 initializeUsers,则不会触发其中的错误处理程序。据我所知,我似乎必须一直使用 .success.error ,这不是它应该工作的方式。 只要我在每个函数上显式使用 .error 以便真正捕获错误,否则错误就会丢失,下一个函数就像上一个函数成功一样。

是我理解错了,还是我的代码有问题?

最佳答案

如果您从 promise 的错误回调中返回,它实际上会返回已解决(未拒绝)的 promise。使用 throw 代替,结果 promise 将被拒绝......

var GET = function (url) {
  return $http({
    method: 'GET',
    url: url
  }).then(
  function (data) {
    return data.data;
  },
  function (data) {
    throw data.data;  // use throw here
  });
};

关于javascript - .then() 中的错误处理程序不会被触发,除非使用 .success 和 .error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24942969/

相关文章:

angularjs - 将 $scope 变量传递给 AngularJS 中的函数

angularjs - 解决 routeprovider 中的多个 promise

javascript - Bluebird 在非 Node 式回调上的 promise

javascript - 一旦父组件的获取调用完成,如何提醒子组件? ReactJS

javascript - 使用 css 或 jquery 在子类上添加样式

javascript - Webpack typescript 导入未定义

javascript - 从年份获取世纪

angularjs - 在指令中使用 "require"来要求父 Controller

javascript - 仅使表格中突出显示的单元格值

JavaScript 无法用相同单词数替换字符串