AngularJS控制器逻辑不执行

AngularJS控制器逻辑不执行,angularjs,Angularjs,我调用了一个API来验证用户的存在。如果找到一个用户,它将发送200,否则它将发送404。下面是我的AngularJS控制器。出于某种原因,通过开发工具,我看到404从API返回,但该控制器不遵循编程逻辑。它什么也不做。当收到200时,它将按预期执行。有什么想法吗 var params = $stateParams.resetToken; var foundUser; $http.get('/api/user/' + params, { }) .then(function

我调用了一个API来验证用户的存在。如果找到一个用户,它将发送200,否则它将发送404。下面是我的AngularJS控制器。出于某种原因,通过开发工具,我看到404从API返回,但该控制器不遵循编程逻辑。它什么也不做。当收到200时,它将按预期执行。有什么想法吗

  var params = $stateParams.resetToken;
  var foundUser;

  $http.get('/api/user/' + params, {

  })
  .then(function onSuccess (res) {
      foundUser = true;
  })
  .then(function onError(res) {
      if (res.status === 404) {
        foundUser = false;
        $location.path('/lost');
      } else {
        console.log(err);
      }
  });

未成功的响应将被视为拒绝的承诺,因此您需要这样处理

$http.get('/api/user/' + params).then(function onSuccess(res) {
    // ...
}, function onError(res) {
    if (res.status === 404) {
        // handle the 404 here
    } else {
        return $q.reject(res); // don't swallow the error if it's unexpected
    }
});

介于200和299之间的响应状态代码被视为成功状态,并将导致调用成功回调。超出该范围的任何响应状态代码都被视为错误状态,并将导致调用错误回调


使用
.catch
处理状态404响应

  var params = $stateParams.resetToken;
  var foundUser;

  $http.get('/api/user/' + params, {

  })
  .then(function onSuccess (res) {
      foundUser = true;
      //return to chain success
      return res;
  })
  //.then(function onError(res) {
  //USE catch to handle errors
  .catch(function onError(res) (
      if (res.status === 404) {
        foundUser = false;
        $location.path('/lost');
      } else {
        console.log(res);
      }
      //throw to chain rejection
      throw res;
  });

错误处理程序应该是
.catch
方法的第一个参数,或者是
.then
方法的第二个参数。

404不被视为成功,因此
onSuccess()
回调不会触发。您应该添加一个错误子句并在那里执行您的失败代码。感谢您的快速响应和解释。我正在查看您提供的资源。我更新了原始问题中的代码。我得到了同样的结果。@CiscoKidx你添加了另一个
然后
方法,这不是我上面的答案。真的吗?你投票否决了我,因为我没有选择你的答案?@CiscoKidx不,我不在乎你接受哪个答案,只是指出你添加了额外的
处理程序,然后添加了
处理程序,而不是添加错误处理程序,因为第二个参数
err
没有定义。此外,不处理拒绝会将承诺转化为成功解决的承诺。