javascript - 如何使 setTimeout 表现得像等待

标签 javascript jquery settimeout wait

我有一段 JavaScript 代码,在某个时刻,我想暂停执行,直到 ajax 通信完成后再继续。

我有以下内容

var set_ajax_done = function(){
  ajax_done = true;
}

// Ajax part
ajax_done = false;
$.ajax({
  url: $url,
  type: 'GET',
  success: function (result) {
    // some treatment
    set_ajax_done();
  }
});

// Make sure the ajax communication and treatment are done before continuing
make_sure_aj_comm_finished();


var make_sure_aj_comm_finished = function(){
  if ( ajax_done == false )
  {
    setTimeout(function(){
      make_sure_aj_comm_finished();
    }, 500);
  }
}

当我执行此代码时,似乎执行只是进行,并不等待 bool 变量 ajax_done 为 true。

我如何使代码递归执行make_sure_aj_comm_finished直到变量ajax_done为true

谢谢!

最佳答案

重申一下,通常您不想尝试将异步 js 转换为同步。

但是如果您必须这样做,您可以通过将您想要在 ajax 调用完成后执行的内容放入一个大函数中来完成您想要做的事情,并在 Ajax 函数的成功回调中调用该函数。不需要为此搞乱设置超时/递归的东西。

即:

$.ajax({
  url: $url,
  type: 'GET',
  success: function (result) {
    // some treatment
    everything_after_ajax();
  }
});

关于javascript - 如何使 setTimeout 表现得像等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32831042/

相关文章:

php - 如何通过AJAX或序列化表单发送Formdata

javascript - tinymce 自定义实现 - 他们的 docAPI 可能会更好

javascript - 具有匹配变量名称的命名函数表达式

JQuery 远程验证传递额外参数?

影响两个下拉菜单的javascript

javascript - 如何在悬停时暂停幻灯片放映

javascript - 当我使用 setInterval() 并传入使用 document.write 向页面输出一些 javascript 的函数时,无法刷新页面

javascript - setTimeout 并没有忠实于我在 $.each 中给出的延迟

javascript - Web Worker 比运行脚本更快吗?

javascript - jQuery 函数 : pass callback functions as optional arguments to another function