AngularJS控制器逻辑不执行

时间:2016-08-08 02:14:07

标签: angularjs

我调用了一个验证用户是否存在的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);
      }
  });

2 个答案:

答案 0 :(得分:2)

使用.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方法的第二个参数。

答案 1 :(得分:-1)

非成功回复将被视为被拒绝的承诺,因此您需要按此处理

$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
    }
});

请参阅https://docs.angularjs.org/api/ng/service/$http#general-usage

  

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