JQuery在异步对话框上的承诺

时间:2016-04-26 15:01:17

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

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

我想我几乎有这个权利,所以如果有人可以帮助解决最后一块拼图,我会非常感激。

杰森

1 个答案:

答案 0 :(得分:3)

overrideDialog().then(overrideDialog2())

应该是:

overrideDialog().then(overrideDialog2)

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

相关问题