javascript - 如何将这个延迟风格的 promise 转换为 ES6 风格的 promise

标签 javascript angularjs deferred es6-promise

请参阅 新手错误 #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) { ... }) 重写,但我真的不知道如何/何时调用 resolvereject 在这个构造函数中,因为真正的逻辑在 _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/

相关文章:

javascript - 如何在 React 中为列表元素定义 css 类?

javascript - 查找一串数字中的特定值

javascript - 根据 slider 值更改按钮中的链接

javascript - 为什么需要注入(inject)服务、常量等?

AngularJS: promise 未正确解决

javascript - 如何让用户能够添加另一个选择数据?

javascript - 消息关闭后不会再次显示

javascript - AngularJS 获得具有特定值的重复项中的第一项

jquery - 不解决延迟会造成内存泄漏吗?

javascript - 在 Angular.js 中实现 promise 时如何始终运行一些代码