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 throw
JavaScript 中的关键字。
这也意味着如果您通过承诺错误“捕获”错误
回调并且您想要将错误转发到派生的承诺
当前的承诺,你必须通过返回一个“重新抛出”错误
拒绝构造通过reject
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)