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