如何在调用异步调用(如Ajax)时等待代码
这个问题在这里已经有了答案:
使用回调。 像这样的东西应该基于你的示例代码工作。
function someFunc() {
callAjaxfunc(function() {
console.log('Pass2');
});
}
function callAjaxfunc(callback) {
//All ajax calls called here
onAjaxSuccess: function() {
callback();
};
console.log('Pass1');
}
这将打印Pass1
立即(假设AJAX请求采用ATLEAST几微秒),然后打印Pass2
的时onAjaxSuccess
被执行。
为什么它不适用于使用Deferred Objects
? 除非我误解了某些东西,否则这可能对您有用。
/* AJAX success handler */
var echo = function() {
console.log('Pass1');
};
var pass = function() {
$.when(
/* AJAX requests */
$.post("/echo/json/", { delay: 1 }, echo),
$.post("/echo/json/", { delay: 2 }, echo),
$.post("/echo/json/", { delay: 3 }, echo)
).then(function() {
/* Run after all AJAX */
console.log('Pass2');
});
};
在这里看到它 。
UPDATE
根据您的输入,似乎您最快的选择是使用同步请求。 您可以在$.ajax
请求中将属性async
设置为false
以使其阻塞。 这将挂起你的浏览器,直到请求完成。
注意我不建议这样做,我仍然认为你应该在基于事件的工作流程中修复你的代码而不依赖它。
真正的程序员用信号量做到这一点。
有一个变量设置为0
。 在每次AJAX调用之前增加它。 在每个成功处理器中减少它,然后测试0
。 如果是,你就完成了。
上一篇: How to make code wait while calling asynchronous calls like Ajax