这是我昨天提出的问题的后续跟进。我遇到了与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()部分在触发下一个对话框之前等待一个对话框完成,但如果用户在第一个对话框中单击“否”,则不会中止处理。
我想我几乎有这个权利,所以如果有人可以帮助解决最后一块拼图,我会非常感激。
杰森
答案 0 :(得分:3)
overrideDialog().then(overrideDialog2())
应该是:
overrideDialog().then(overrideDialog2)
done
正在工作的原因是因为你将它包装在一个函数中(它没有立即执行)