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