簡體   English   中英

如何在AngularJS中定義錯誤回調?

[英]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);
       }
    );
}

Angular $ q doc

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM