Trong jQuery, nếu bạn mắc lỗi trong phương thức gọi lại ajax, bạn sẽ nhận được thông báo lỗi điều khiển thích hợp và stacktrace.Dojo - Tham khảoMỗi ngoại lệ trong lời hứa bị nuốt
$.get("https://api.github.com/users/octocat/orgs", function() {
var a = FAIL;
});
Tuy nhiên, trong dojo sử dụng dojo/request/xhr có vẻ như những sai lầm ngớ ngẩn này đang được nuốt hoàn toàn. Điều duy nhất trong bảng điều khiển của tôi khi tôi chạy này là "sau đó" và "luôn luôn".
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');
});
});
Sử dụng thẻ dojo.xhrGet không được chấp nhận, vấn đề được cải thiện rất ít. Tôi nhận được thông console lỗi và xử lý lỗi của tôi được gọi nhưng nó chỉ nói "ReferenceError {}" và cung cấp cho tôi với một vết đống mà không bao giờ trỏ tới một hàm tôi sở hữu:
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');
}
});
Khi viết một chương trình chúng tôi thực hiện sai lầm, thật tuyệt khi chúng tôi có các công cụ như công cụ phát triển chrome để chỉ cho chúng tôi những lỗi đó. Thời gian cần để tìm lỗi khi bạn có thể thấy một stacktrace và thông báo lỗi rõ ràng là nhanh hơn nhiều nếu bạn không nhận được phản hồi. Tôi không nhận được phản hồi trong dojo, tôi không thể tin rằng một thư viện phổ biến như vậy có thể hoạt động theo cách này. Tôi đang làm gì sai?
Đây là lời giải thích tuyệt vời về những gì đang xảy ra. Dưới đây là một thay đổi nhỏ cho mã của bạn cung cấp một stacktrace quá: http://jsfiddle.net/5rHM6/ Thật không may ngăn xếp dấu vết không trỏ đến dòng chính xác (nó trỏ đến dòng console.error). Vì vậy, nếu bạn muốn bắt lỗi, đây là câu trả lời đúng; nếu bạn muốn tìm lỗi, tôi có xu hướng chọn câu trả lời của tôi. Tuy nhiên có vẻ như nếu bạn bắt gặp lỗi, thiết bị bị triệt tiêu, do đó bạn không thể đạt được kết quả tốt nhất của cả hai thế giới. –
Bạn nói đúng, đó là dịch vụ thông báo vượt qua ("có lỗi") trái ngược với dịch vụ báo lỗi đầy đủ với dấu vết ngăn xếp. Tôi sẽ yêu cầu bạn kiểm tra thư viện Q, đó là thư viện không đồng bộ tốt nhất mà tôi biết và chắc chắn họ sẽ giải quyết vấn đề này. –