Javascript 如何将此延迟样式承诺转换为ES6样式承诺
参考菜鸟的错误4:在的文章中使用“延迟”(顺便说一句,这是一篇很棒的帖子!),我尝试不再使用延迟风格的承诺。最近我遇到了一个实际的例子,我不知道如何不以延迟的方式编写代码,所以我需要一些建议 以下是角度工厂的示例: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=功能(结果){ 延迟。解决(结
函数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哦,说得对,我没意识到,谢谢!