我有一个函数,我从一个timeout调用,它发出一个 AJAX 调用;我还有一个button click调用,如果ajax调用正在运行,我不想在ajax调用完成之前执行它;如果ajax调用没有运行,我想运行button click代码。
处理这个问题的最好方法是什么?用一个变量来检查 AJAX 函数是否正在运行,或者有别的方法吗?
下面是我的伪代码
setTimeout(doAjax, 5000);
function doAjax() {
$.ajax({
url: "xxx.com/dosomething",
dataType: 'json',
type: 'POST',
cache: false,
contentType: 'application/json; charset=utf-8',
success: function (data) { doSuccess() },
error: function (data, status, jqXHR) { doError() }
});
}
function myBtnClick() {
// wait for doAjax call to complete if running
}
2条答案
按热度按时间vhmi4jdf1#
这里的解决方案是使用promise来维护异步代码的状态。
最初,
clickDelayPromise
将立即解析,但一旦 AJAX 调用开始,promise将仅在请求完成后解析。x一个一个一个一个x一个一个二个x
tjvv9vkg2#
你可以通过确保你的先决条件异步操作是承诺的来实现你想要的,如果你有一个数组来存储它们,那么你可以这样做:
概念验证:
x一个一个一个一个x一个一个二个x