在jQuery中,如果您在ajax回調方法中犯了錯誤,您將收到適當的控制檯錯誤消息和堆棧跟蹤。Dojo - 承諾被吞噬的ReferenceError異常
$.get("https://api.github.com/users/octocat/orgs", function() {
var a = FAIL;
});
但是,在使用dojo/request/xhr的dojo中,這些愚蠢的錯誤似乎完全被吞噬了。當我運行這個時,我的控制檯中唯一的東西是「然後」和「永遠」。
require(["dojo/request/xhr" ], function(xhr) {
var promise = xhr.get("https://api.github.com/users/octocat/orgs");
promise.then(function(data) {
console.log('then');
var a = FAIL;
console.log('goodbye');
}, function() {
console.log('error');
});
promise.otherwise(function() {
console.log('otherwise');
});
promise.always(function() {
console.log('always');
});
});
使用棄用的dojo.xhrGet,問題稍微改善。我得到一個控制檯錯誤消息和我的錯誤處理程序的調用,但它只是說「的ReferenceError {}」,併爲我提供了,從來沒有指向我自己的功能堆棧跟蹤:
dojo.xhrGet({
url: "https://api.github.com/users/octocat/orgs",
load: function() {
console.log('dojo.xhrGet.load');
var a = FAIL;
console.log('goodbye dojo.xhrGet.load');
},
error: function() {
console.log('dojo.xhrGet.error');
},
handle: function() {
console.log('dojo.xhrGet.handle');
}
});
當編寫一個程序,我們做錯誤,很高興我們有像Chrome開發工具這樣的工具來指出我們的錯誤。當您看到堆棧跟蹤和錯誤消息時,找到錯誤所需的時間顯然比沒有反饋時快得多。我在道場沒有得到任何反饋,我不敢相信這樣一個流行的圖書館可以這樣運作。我究竟做錯了什麼?
這是對發生了什麼事情的很好解釋。下面是你的代碼的一個小改動,它也提供了堆棧跟蹤:http://jsfiddle.net/5rHM6/不幸的是堆棧跟蹤沒有指向正確的行(它指向console.error行)。所以如果你想知道錯誤,這是正確的答案。如果你想找到錯誤,我傾向於選擇我的答案。但是,如果你確實發現了錯誤,那麼儀器會被壓制,所以你無法得到兩全其美的結果。 –
你是對的,它更像是一個消息傳遞服務(「出現錯誤」),而不是使用堆棧跟蹤的完整錯誤拋出服務。我希望你能看看Q庫,這是我所知道的最好的異步庫,他們肯定會處理這個問題。 –