Tham khảo Rookie sai lầm # 4: sử dụng "hoãn" trong bài viết Nolan Lawson 's: (! Btw một bài tuyệt vời) We have a problem with promises, tôi cố gắng không sử dụng lời hứa phong cách thu nhập hoãn lại nữa không. Gần đây tôi đã gặp phải một ví dụ thực tế mà tôi không thể tìm ra cách để KHÔNG mã này theo cách trì hoãn, vì vậy tôi cần một số lời khuyên.Làm thế nào để chuyển đổi lời hứa này hoãn lại phong cách để ES6 phong cách hứa hẹn
Dưới đây là ví dụ, một nhà máy góc:
function ConfirmModal($q, $modal) {
return {
showModal: function _showModal(options) {
var _modal = $modal(options)
var deferred = $q.defer()
_modalScope.confirm = function(result) {
deferred.resolve(result)
_modal.hide()
}
_modalScope.cancel = function(reason) {
deferred.reject(reason)
_modal.hide()
}
return deferred.promise
}
}
}
Tôi giấu một số chi tiết không liên quan, ý tưởng cốt lõi là (ví dụ như thực hiện _modalScope
.): $modal
cung cấp một widget ui, trong đó có hai nút: Confirm và Hủy. Khi Xác nhận được nhấp, hãy gọi _modalScope.confirm
và giải quyết lời hứa hoãn lại, nếu không từ chối lời hứa hoãn lại bằng cách gọi _modalScope.cancel
khi Hủy được nhấp.
tôi cố gắng viết lại bằng cách sử dụng return $q(function(resolve, reject) { ... })
, nhưng tôi thực sự không biết làm thế nào/khi gọi resolve
và reject
trong constructor này, bởi vì logic thực tế là trong phương pháp _modalScope.confirm/cancel
. Tôi đang vật lộn với vấn đề này trong nhiều ngày, thực sự hy vọng ai đó có thể giúp tôi.
Cảm ơn!
Trong thực tế, bạn không sử dụng các [antipattern hoãn lại] (http : //stackoverflow.com/q/23803743/1048572) ở đây, bởi vì '$ modal' không phải là một lời hứa api rồi. Trì hoãn là hoàn toàn tốt đẹp cho những điều hứa hẹn! – Bergi
@Bergi ồ, khá rõ, tôi không nhận ra điều đó, cảm ơn! – nightire