LBA*_*LBA 3 javascript promise angularjs angularjs-1.6
在我的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
}
Run Code Online (Sandbox Code Playgroud)
在我的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);
}
);
}
Run Code Online (Sandbox Code Playgroud)
当我POST
发送200响应代码时,一切按预期do something after success
执行.
但是当我的POST结果例如在401中我可以看到Messages.create被调用(所以在这种情况下它进入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);
}
);
}
Run Code Online (Sandbox Code Playgroud)
reject(reason);
创建一个使用指定的拒绝解析的promise
reason
.这个api应该用于在一系列承诺中转发拒绝.如果您正在处理承诺链中的最后一个承诺,则无需担心.将延迟/承诺与熟悉的try/catch/throw行为进行比较时,请将其
reject
视为throw
JavaScript中的关键字.这也意味着如果您通过promise错误回调"捕获"错误并且您希望将错误转发到从当前promise中派生的promise,则必须通过返回通过构造的拒绝来"重新抛出"错误reject
.
归档时间: |
|
查看次数: |
1819 次 |
最近记录: |