簡體   English   中英

在angularjs $ http.get()調用上catch()不會抑制錯誤

[英]catch() on angularjs $http.get() call doesn't suppress error

我有以下代碼(為簡化起見, 在codepen中運行 ):

var app = angular.module("httptest", []);

app.controller("getjson", ["$scope", "$http", function($scope, $http) {
  $http.get("https://codepen.io/anon/pen/LVEwdw.js").
  then((response) => {
    console.log(response.data)
    console.log('in then')
    throw 'the error'
  }).catch((e) => {
    console.log('in the catch')
    console.log(e);
  });
}]);

我的期望是,如果輸入catch()塊,則該錯誤將不會在控制台中顯示,除非明確記錄該錯誤(即,它不會以紅色顯示)。 但是,情況並非如此,紅色錯誤消息會打印到控制台,然后輸入catch()塊。 我試圖在此處設置一個不使用AngularJS的$http 的等效示例 ,並且其行為與我期望的方式相同:

var promise1 = new Promise(function(resolve, reject) {
  resolve();
});

promise1.then((result) => {
  console.log('about to throw error')
  throw 'hey'
 }).catch(function(error) {
  console.log(error);
});

在此示例中,沒有紅色錯誤使它通過。

這是怎么回事,在$http情況下是否可以抑制已處理的錯誤?

您可以在鏈接的angularjs模塊的第8416行找到說明。 它們只是catch語句中的console.error。 您可以通過空處理程序來覆蓋此行為,例如:

angular.module('exceptionOverride', []).factory('$exceptionHandler', () => (exception, cause) });

var app = angular.module("httptest", ['exceptionOverride']);

....

AngularJS 1.6的發布已修復了該問題:

從GitHub提交:

fix($ q):將拋出的錯誤視為常規拒絕

以前,對諾言的onFulfilledonRejected處理程序中引發的錯誤的處理方式與常規拒絕處理方式略有不同:將它們傳遞給$exceptionHandler() (除了轉換為拒絕處理之外)。

AngularJS GitHub提交e12eea

另請參閱AngularJS開發人員指南-遷移至V1.6-$ q

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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