In jQuery, wenn Sie einen Fehler in Ihrer Ajax Callback-Methode machen, erhalten Sie eine ordnungsgemäße Konsole Fehlermeldung und Stacktrace.Dojo - ReferenceError Ausnahme im Versprechen wird geschluckt
$.get("https://api.github.com/users/octocat/orgs", function() {
var a = FAIL;
});
In Dojo mit dojo/request/xhr scheint es jedoch, dass diese dummen Fehler vollständig verschluckt werden. Die einzige Sache in meiner Konsole, wenn ich das führe, ist "dann" und "immer".
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');
});
});
Mit der veralteten Dojo.xhrGet wird das Problem sehr leicht verbessert. Ich erhalte eine Konsole Fehlermeldung und meine Fehler-Handler aufgerufen wird, aber es sagt nur „Reference {}“ und bietet mir einen Stack-Trace, die nie auf eine Funktion verweist ich besitze:
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');
}
});
Wenn ein Programm schreiben, wir machen Fehler, es ist schön, dass wir Tools wie Chrome-Entwicklerwerkzeuge haben, um uns auf diese Fehler hinzuweisen. Die Zeit, die benötigt wird, um einen Fehler zu finden, wenn Sie einen Stacktrace und eine Fehlermeldung sehen, ist offensichtlich viel schneller als wenn Sie keine Rückmeldung erhalten. Ich bekomme im Dojo kein Feedback, ich kann nicht glauben, dass eine so populäre Bibliothek so funktionieren könnte. Was mache ich falsch?
Dies ist eine großartige Erklärung dessen, was vor sich geht. Hier ist eine kleine Änderung an Ihrem Code, die auch einen Stacktrace gibt: http://jsfiddle.net/5rHM6/ Leider zeigt der Stack-Trace nicht auf die richtige Zeile (er zeigt auf die console.error-Zeile). Wenn Sie also den Fehler abfangen wollen, ist dies die richtige Antwort. Wenn Sie den Fehler finden wollen, bin ich geneigt, meine Antwort auszuwählen. Es scheint jedoch, dass wenn Sie den Fehler abfangen, die Instrumentierung unterdrückt wird, so dass Sie nicht das Beste aus beiden Welten erhalten können. –
Sie haben recht, es handelt sich eher um einen Nachrichtendienst ("Es gab einen Fehler"), im Gegensatz zu einem vollständigen Fehlerwarndienst mit Stack-Trace. Ich würde Sie dringend bitten, die Q-Bibliothek zu überprüfen, es ist die beste asynchrone Bibliothek, die ich kenne, und sie befassen sich sicherlich mit diesem Problem. –