[英]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):將拋出的錯誤視為常規拒絕
以前,對諾言的
onFulfilled
或onRejected
處理程序中引發的錯誤的處理方式與常規拒絕處理方式略有不同:將它們傳遞給$exceptionHandler()
(除了轉換為拒絕處理之外)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.