如何在 AngularJS 中定义错误回调?

2024-04-04

In my 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);
       }
    );
}

When my POST提供 200 响应代码,一切按预期进行do something after success被执行。

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

我必须迁移它,因为我使用的是已弃用的并且自从 Angular 1.6 删除以来.success and .error承诺属性。当时可以用,但迁移后就不再用了。

我在这里做错了什么?


You may reject错误回调中的承诺。

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

From 角度 $q 文档 https://docs.angularjs.org/api/ng/service/%24q:

reject(reason);

创建一个被指定拒绝的承诺reason。该 api 应该用于在链中转发拒绝 承诺。如果您正在处理承诺链中的最后一个承诺, 你不需要担心它。

当将 deferreds/promise 与熟悉的行为进行比较时 尝试/捕捉/抛出,思考reject as the throwJavaScript 中的关键字。 这也意味着如果您通过承诺错误“捕获”错误 回调并且您想要将错误转发到派生的承诺 当前的承诺,你必须通过返回一个“重新抛出”错误 拒绝构造通过reject.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 AngularJS 中定义错误回调? 的相关文章

随机推荐