Javascript JQuery在异步对话框上的承诺

Javascript JQuery在异步对话框上的承诺,javascript,jquery,Javascript,Jquery,这是我昨天问的一个问题的后续。我遇到了与jquery承诺相关的另一个问题 function setOverrides2() { var dfd = new $.Deferred(); // do something return dfd.promise(); }

这是我昨天问的一个问题的后续。我遇到了与jquery承诺相关的另一个问题

                    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()时,它同时显示两个对话框。我希望能够在用户第一次单击No按钮(由onConfirmNo()回调定义)时使用reject()中止链

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

我想我几乎有这个权利,所以如果有人能在最后一块拼图上提供帮助,我将不胜感激

杰森

应该是:

overrideDialog().then(overrideDialog2)

之所以
done
起作用,是因为您将它包装在一个函数中(该函数没有立即执行)

您没有将函数传递给
然后
。如果您这样做了(就像您对
done
所做的那样),它的工作原理与OverrideDialog2()是一个函数一样。你是说我需要传递一个匿名函数吗?不是
overrideDialog2
是一个函数,
overrideDialog2()
不是
function(){return overrideDialog2();}
也是一个函数。DOH!成功了。谢谢
overrideDialog().then(overrideDialog2)