所以Javascript不是多线程的。但我有以下问题。
我使用来自setTimeout
的函数的AJAX调用。我需要知道能够在重新安排函数之前区分何时有活动的AJAX调用
为此,我使用2个全局变量。所以代码结构如下:
setTimeout(some_function, 10000);
window.ajax_running = 0;
window.calls_so_far = 0;
function some_function () {
if(window.ajax_running) {
setTimeout(some_function, 10000);
return;
}
window.ajax_running = 1;
$.ajax({
//various
success: function (data) {
window.calls_so_far = window.calls_so_far + 1;
console.log('Running calls: ' + window.calls_so_far);
if(window.calls_so_far >= SOME_VALUE) {
//we are ok ajax has finished
window.ajax_running = 0;
}
}
简单的代码。问题是它不起作用。我在控制台中看到了:
正在通话:1 所以全局变量没有递增。就像每个AJAX调用看到原始值0并递增它一样(就好像有线程一样) 我在这里搞砸了什么?我该如何解决这个问题?
答案 0 :(得分:0)
成功运行时,ajax调用已经完成,因此当你添加calls_so_far时,你没有运行这个调用。 我不确定为什么你需要调用“计数”,但如果只是另一个问题(在第一个完成后调用相同的函数,我会建议这种方法:
var counter;
counter = 0;
function recallSomeFunction() {
setTimeout(some_function, 10000);
}
function some_function () {
$.ajax({
//various
success: function (data) {
if (++counter < SOME_VAL) recallSomeFunction();
//...
},
error: function ( jqXHR, textStatus, errorThrown )) {
recallSomeFunction()
//...
});
}