如何在AngularJS中定义错误回调



在我的 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

但是,当我的帖子结果例如在401中,我可以看到邮件。创建是调用的(在这种情况下,它进入error路径),但不幸的是,我的控制器调用successCallback,而不是errorCallback

我不得不迁移它,因为我正在使用不弃用的情况,并且由于Angular 1.6删除了.success.error承诺属性。那时正在工作,但是迁移后,这不再起作用。

我在这里做错了什么?

您可以拒绝错误回调中的承诺。

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:

reject(reason);

创造了一个被拒绝的诺言 reason。该API应用于在一系列链中转发拒绝 承诺。如果您要处理承诺链中的最后承诺, 您不必担心。

将延期/承诺与熟悉的行为进行比较时 尝试/捕获/投掷,将reject视为JavaScript中的throw关键字。 这也意味着,如果您通过承诺错误"捕获"错误 回调,您想将错误转发到从 当前的诺言,您必须通过返回一个错误来"重新"错误 通过reject

构建的拒绝

相关内容

  • 没有找到相关文章

最新更新