请参阅新手错误#4:在Nolan Lawson的文章中使用" deferred" :We have a problem with 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小部件:确认和取消即可。单击确认后,请致电_modalScope.confirm
并解决延期承诺,否则在点击取消时致电_modalScope.cancel
拒绝延期承诺。
我尝试使用return $q(function(resolve, reject) { ... })
重写,但我真的不知道如何/何时在此构造函数中调用resolve
和reject
,因为真正的逻辑是_modalScope.confirm/cancel
方法。我好几天都在努力解决这个问题,真的希望有人可以帮助我。
谢谢!
答案 0 :(得分:5)
假设您的问题中的代码功能正常,_modalScope
可以从_showModal()
函数访问,那么下面的代码应该回答您的问题:
function ConfirmModal($q, $modal) {
return {
showModal: function _showModal(options) {
return $q(function(resolve, reject) {
var _modal = $modal(options)
_modalScope.confirm = function(result) {
resolve(result)
_modal.hide()
}
_modalScope.cancel = function(reason) {
reject(reason)
_modal.hide()
}
});
}
}
}