Tôi biết trường hợp sử dụng được đề xuất cho Dojo Deferred là sử dụng dojo.when (def) hoặc def.then() và cung cấp gọi lại cho thời điểm trì hoãn được giải quyết. Tuy nhiên, đôi khi tôi chạy vào scenarious, nơi tôi thực sự cần phải chờ đợi cho rằng hoãn để hoàn thành trước khi tiếp tục với các chủ đề hiện tại. Dưới đây là một ví dụ (hoàn thành ví dụ tại http://jsfiddle.net/DG3Ax/2/)Làm thế nào tôi có thể chặn cho đến khi Dojo Trì hoãn được giải quyết?
function getSomething() {
var def = getSomeDeferred();
def.then(function(result) {
dojo.place("<li>def.then() = " + result + "</li>", "output");
});
return def.gimmeTheResultNow();
}
dojo.place("<li>getSomething() = " + getSomething() + "</li>", "output");
Rõ ràng Deferred.gimmeTheResultNow()
không tồn tại, nhưng đó là chức năng mà tôi đang tìm kiếm. Tôi không có quyền kiểm soát của mã gọi getSomething(), vì vậy tôi không thể làm cho nó xử lý một hoãn lại; nó cần kết quả thực sự.
Tôi biết xhrGet() có thông số đồng bộ hóa mà tôi nghĩ sẽ thực hiện công việc nếu đây là cuộc gọi AJAX, nhưng điều đó không nhất thiết phải xảy ra. Có cách nào khác để thực hiện việc này không?
Tôi không biết những gì bạn hoãn lại, nhưng có vẻ như bạn nên loại bỏ nó. Trì hoãn dành cho hành vi không bị chặn, không đồng bộ. – bfavaretto