这是我昨天提出的一个问题的后续。我有一个与 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/