请参阅 新手错误 #4:在 Nolan Lawson 中使用“延迟”的文章:We have a problem with promises (顺便说一句很棒的帖子!),我尽量不再使用延迟风格的 promise 。最近我遇到了一个实际的例子,我不知道如何不以延迟的方式编码,所以我需要一些建议。
这是一个例子,一个 Angular 工厂:
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时,调用_modalScope.confirm
并解决延迟 promise ,否则通过调用_modalScope.cancel
拒绝延迟 promise ,当取消被点击。
我尝试使用 return $q(function(resolve, reject) { ... })
重写,但我真的不知道如何/何时调用 resolve
和 reject
在这个构造函数中,因为真正的逻辑在 _modalScope.confirm/cancel
方法中。我被这个问题困扰了好几天,真的希望有人能帮助我。
谢谢!
最佳答案
假设您问题中的代码是函数式的并且 _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()
}
});
}
}
}
关于javascript - 如何将这个延迟风格的 promise 转换为 ES6 风格的 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31090121/