如何将这个延迟风格的承诺转换为 ES6 风格的承诺
How to convert this deferred style promise to ES6 style promise
参考菜鸟错误#4:在Nolan Lawson's article: We have a problem with promises中使用"deferred"(顺便说一句,很棒的post!),我尽量不不再使用延迟样式承诺。最近我遇到了一个实际的例子,我不知道如何不以延迟方式编码,所以我需要一些建议。
这是一个例子,一个 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小部件,其中包含两个按钮:确认和取消。当点击确认时,调用_modalScope.confirm
并解决延迟承诺,否则在取消[=36]时调用_modalScope.cancel
拒绝延迟承诺=] 被点击。
我尝试用return $q(function(resolve, reject) { ... })
重写,但我真的不知道how/when在这个构造函数中调用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()
}
});
}
}
}
参考菜鸟错误#4:在Nolan Lawson's article: We have a problem with promises中使用"deferred"(顺便说一句,很棒的post!),我尽量不不再使用延迟样式承诺。最近我遇到了一个实际的例子,我不知道如何不以延迟方式编码,所以我需要一些建议。
这是一个例子,一个 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小部件,其中包含两个按钮:确认和取消。当点击确认时,调用_modalScope.confirm
并解决延迟承诺,否则在取消[=36]时调用_modalScope.cancel
拒绝延迟承诺=] 被点击。
我尝试用return $q(function(resolve, reject) { ... })
重写,但我真的不知道how/when在这个构造函数中调用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()
}
});
}
}
}