Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将此延迟样式承诺转换为ES6样式承诺_Javascript_Angularjs_Deferred_Es6 Promise - Fatal编程技术网

Javascript 如何将此延迟样式承诺转换为ES6样式承诺

Javascript 如何将此延迟样式承诺转换为ES6样式承诺,javascript,angularjs,deferred,es6-promise,Javascript,Angularjs,Deferred,Es6 Promise,参考菜鸟的错误4:在的文章中使用“延迟”(顺便说一句,这是一篇很棒的帖子!),我尝试不再使用延迟风格的承诺。最近我遇到了一个实际的例子,我不知道如何不以延迟的方式编写代码,所以我需要一些建议 以下是角度工厂的示例: 函数ConfirmModal($q,$modal){ 返回{ showModal:功能_showModal(选项){ var_modal=$modal(选项) var deferred=$q.deferred() _modalScope.confirm=功能(结果){ 延迟。解决(结

参考菜鸟的错误4:在的文章中使用“延迟”(顺便说一句,这是一篇很棒的帖子!),我尝试不再使用延迟风格的承诺。最近我遇到了一个实际的例子,我不知道如何不以延迟的方式编写代码,所以我需要一些建议

以下是角度工厂的示例:

函数ConfirmModal($q,$modal){
返回{
showModal:功能_showModal(选项){
var_modal=$modal(选项)
var deferred=$q.deferred()
_modalScope.confirm=功能(结果){
延迟。解决(结果)
_modal.hide()
}
_modalScope.cancel=功能(原因){
拒绝(理由)
_modal.hide()
}
延期退换货
}
}
}
我隐藏了一些不相关的细节(例如
\u modalScope
),核心思想是:
$modal
提供一个包含两个按钮的ui小部件:确认和取消。单击“确认”时,请调用“modalScope”。确认“modalScope”并解决延迟承诺,否则,请通过调用“modalScope”拒绝延迟承诺。单击“取消”时,请调用“取消”

我试图通过使用
return$q(函数(resolve,reject){…})
重写,但我真的不知道如何/何时在这个构造函数中调用
resolve
reject
,因为真正的逻辑在
\modalScope.confirm/cancel
方法中。我为这个问题挣扎了好几天,真希望有人能帮我


谢谢

假设问题中的代码是功能性的,并且可以从
\u showmodel()
功能访问
\u modalScope
,那么下面的代码应该可以回答您的问题:

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()
                }
            });
        }
    }
}

我以前试过这个,我认为它不起作用,在读了你的答案后我又试了一次,它确实起作用了!我认为它不起作用,因为angular抛出了一个错误,但我没有仔细阅读,结果发现错误与这次修改无关,我的错。非常感谢。Angular 1.2不适用。不确定角度1.3。似乎适用于Angular 1.4和1.5。事实上,您没有使用here,因为
$modal
已经不是promise api了。尊重对承诺的事情来说是完全好的@Bergi哦,说得对,我没意识到,谢谢!