![](/img/trans.png)
[英]AngularJS: Using Shared Service(with $resource) to share data between controllers, but how to define callback functions?
[英]How to define an error callback in 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
執行do something after success
,一切都會按預期do something after success
。
但是,當我的POST結果(例如在401中)時,我可以看到Messages.create被調用(因此,在這種情況下,它進入了error
路徑),但是不幸的是,我的控制器調用了successCallback
而不是errorCallback
。
我必須遷移它,因為我正在使用不推薦使用的東西,並且由於Angular 1.6刪除了.success
和.error
promise屬性。 當時可以正常使用,但是在遷移之后,它不再起作用。
我在這里做錯了什么?
您可以在錯誤回調中拒絕承諾。
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);
}
);
}
reject(reason);
創建一個由於指定
reason
而被拒絕的promise。 此api應該用於在承諾鏈中轉發拒絕。 如果您正在處理承諾鏈中的最后一個承諾,則無需擔心。在將延遲/承諾與熟悉的try / catch / throw行為進行比較時,請將
reject
視為JavaScript中的throw
關鍵字。 這也意味着,如果您通過promise錯誤回調“捕獲”錯誤,並且想要將錯誤轉發到從當前promise派生的promise,則必須通過返回一個由reject
創建的reject
來“ throwth”錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.