gpt4 book ai didi

javascript - 异步对话框中的 JQuery Promises

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:57:16 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com