请参阅Nolan Lawson的文章中的新手错误 #4:使用“延迟”:We have a problem with promises(顺便说一句,这是一篇很棒的文章!),我尽量不再使用延迟样式的 promises。最近我遇到了一个实际示例,我无法弄清楚如何不以延迟方式对其进行编码,所以我需要一些建议。
这是一个例子,一个角度工厂:
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
}
}
}
我隐藏了一些不相关的细节(例如 的实现_modalScope
),核心思想是:$modal
提供一个包含两个按钮的 ui 小部件:Confirm和Cancel。单击Confirm时,调用_modalScope.confirm
并解决延迟的 Promise,否则单击Cancel_modalScope.cancel
时通过调用来拒绝延迟的Promise。
我试图通过 using 重写return $q(function(resolve, reject) { ... })
,但我真的不知道如何/何时在这个构造函数中调用resolve
和reject
,因为真正的逻辑在_modalScope.confirm/cancel
方法中。我为这个问题苦苦挣扎了好几天,真的希望有人能帮助我。
谢谢!