Tôi có câu hỏi về dojo/Deferred. Tôi sẽ bắt đầu với câu hỏi, sau đó đi vào chi tiết hơn về những gì tôi đang làm:Làm thế nào để thực thi mã phổ biến sau khi một đối tượng Dojo trì hoãn được giải quyết hoặc bị từ chối?
Có cách nào để thực thi cùng một dòng mã không phụ thuộc vào kết quả của trì hoãn, loại giống như một khối finally
một tuyên bố try...catch
? Từ những gì tôi đã đọc, nó không có vẻ như có, nhưng có lẽ tôi hiểu tài liệu sai và muốn xác minh rằng với cộng đồng SO.
Đây là những gì tôi đang làm:
Trong Dojo 1.9 (cũng hoạt động trong 1,8), tôi nhanh chóng một dojox.widget.Standby (một lớp phủ tải) cho một ContentPane trước khi tải một số dữ liệu. Khi cuộc gọi trả lời đã hoàn thành, tôi muốn ẩn lớp phủ của mình như được hiển thị bên dưới:
standby = new Standby({
... // standby props
});
this.addChild(standby);
standby.show();
queryResults = grid.store.query({
... // query props
});
queryResults.then(function (results) {
if (results) {
... // do something
}
standby.hide();
}, function (error) {
... // handle error
standby.hide();
});
Điều này làm việc tốt; Tuy nhiên, có lẽ, tôi có thể có một số quá trình được thực hiện sau khi hoàn thành trả chậm mà chiếm một số dòng mã thay vì chỉ là một dòng duy nhất và tôi sẽ không muốn lặp lại những dòng mã. Một lựa chọn khác là tạo ra một hàm riêng và chỉ gọi nó với một lớp lót trong mỗi khối, nhưng nếu có cách nào tốt hơn, tôi muốn sử dụng tuyến đó.
Cảm ơn trước!
cả quý vị và @Lucas đã trả lời câu hỏi của tôi vì cả hai câu trả lời của bạn là chính xác. Tôi đã đưa ra 'Câu trả lời hay nhất' cho @Lucas bởi vì tôi nghĩ rằng 'luôn luôn' đại diện cho một mục đích rõ ràng hơn so với' bổ sung 'sau đó. Nhưng tôi đã bình chọn cho câu trả lời của bạn về tính chính xác của nó. – David