javascript - 异步对话框中的 JQuery Promises

标签 javascript jquery

这是我昨天提出的一个问题的后续。我有一个与 jquery promises 相关的不同问题。

                    function setOverrides2() {
                        var dfd = new $.Deferred();
                        // do something
                        return dfd.promise();
                    }

                    function overrideDialog1() {

                        var deferred = new $.Deferred();

                        ConfirmMessage.onConfirmYes = function() {
                            ConfirmMessage.hideAll();
                            // do stuff
                            deferred.resolve();
                        }

                        ConfirmMessage.onConfirmNo = function() {
                            ConfirmMessage.hideAll();
                            // do stuff
                            deferred.reject();
                        }

                        ConfirmMessage.showConfirmMessage("Do you wish to override primary eligibility?");

                        return deferred.promise();

                    }

                    function overrideDialog2() {

                        var deferred = new $.Deferred();

                        ConfirmMessage.onConfirmYes = function() {
                            ConfirmMessage.hideAll();
                            // do stuff 
                            deferred.resolve();
                        }

                        ConfirmMessage.onConfirmNo = function() {
                            ConfirmMessage.hideAll();
                            // do stuff
                            deferred.reject();
                        }

                        ConfirmMessage.showConfirmMessage("Do you wish to override secondary eligibility?");

                        return deferred.promise();
                    }

                    setOverrides2().done(function(data) {

                        // shows both dialogs at once
                        overrideDialog().then(overrideDialog2()).then(function() {
                            alert("test");
                        });

                        // waits for one dialog to complete before showing the other
                        //  overrideDialog1().done(function() {
                        //      overrideDialog2().done(function() {
                        //          alert("test two!");
                        //      });
                        //  });
                    });

如上所示,当我使用 done() 时,它工作得很好,但是当我使用 then() 时,它会同时显示两个对话框。我希望能够在用户第一次单击否按钮(由 onConfirmNo() 回调定义)时使用 reject() 中止链。

注释的 .done() 部分在触发下一个对话框之前等待一个对话框完成,但如果用户在第一个对话框上单击“否”则不会中止处理。

我想我差不多有这个权利了,所以如果有人可以帮助解决这最后一 block 拼图,我将不胜感激。

杰森

最佳答案

overrideDialog().then(overrideDialog2())

应该是:

overrideDialog().then(overrideDialog2)

done 工作的原因是因为你将它包装在一个函数中(它没有立即执行)

关于javascript - 异步对话框中的 JQuery Promises,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36868708/

相关文章:

javascript - Meteor JS 未捕获引用错误 : Session is not defined

javascript - 复选框 jQuery 的意外响应

javascript - 如何在同一页面上以html形式操作php函数?

javascript - div/iframe 内的 jquerymobile + phonegap 外部页面

javascript - 在循环数组时发出 json 请求和存储值的正确方法是什么?

javascript - Angularjs - 交叉 Controller 工厂更新

javascript - 如何从 typescript 中的对象键字符串中提取确切的联合类型?

javascript - React - 分段显示文本消息

jQuery 在 FF 中有效,但在 Safari 中无效

javascript - HTML/Javascript - 导航到已打开的浏览器选项卡/窗口