在我的Controller中:

function login(credentials) {
  AuthService
    .login(credentials)
    .then(successCallback, errorCallback);
    //same issue with .then(successCallback).catch(errorCallback);
}

function successCallback() {
  // do something after success
}

function errorCallback(data) {
  // do something after error
}

并在我的AuthService中:
authService.login = function (credentials) {
  return $http
    .post(ENV.apiEndpoint + 'api/v1/login_check', credentials)
    .then(
       function (result) {
        Session.create(result.data.token, result.data.data);
       },
       function (data) {
        Messages.create('Login failed: ' + data.statusText);
       }
    );
}

当我的POST传递200响应代码时,一切按预期的方式运行do something after success被执行。

但是当我的POST结果例如在401中,我可以看到Messages.create被调用(因此在这种情况下,它进入error路径),但是不幸的是,我的 Controller 调用了successCallback而不是errorCallback

我必须迁移它,因为我正在使用不推荐使用的功能,并且因为Angular 1.6删除了.success.error Promise属性。当时可以正常工作,但是在迁移之后,它不再起作用。

我在这里做错了什么?

最佳答案

您可以在错误回调中拒绝 promise 。

authService.login = function (credentials) {
  return $http
    .post(ENV.apiEndpoint + 'api/v1/login_check', credentials)
    .then(
       function (result) {
         Session.create(result.data.token, result.data.data);
       },
       function (data) {
         Messages.create('Login failed: ' + data.statusText);
         return $q.reject(data);
       }
    );
}

Angular $q doc:

关于javascript - 如何在AngularJS中定义错误回调?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42391944/

10-09 21:57