函数在变量更新后的某个时间点执行

javascript : function to execute at a later point in time once variables updated

本文关键字:时间 执行 变量 更新 函数      更新时间:2023-09-26

这是Javascript在单线程上线性执行的问题。

使用

  setTimeout(function(){},time);

被求值并立即执行function()

我正在寻找一个方法来执行function()在x秒,例如dom已经从ajax调用更新后。

这是怎么做的?

换句话说,只需要"暂停"脚本,然后让它知道何时执行。

如果您在函数(); 中做了类似的操作
      var a= document.getElementbyId("anid").innerHTML;

var a将在setInterval被处理时收集,而不是在函数执行时的x秒内收集。

谢谢…

setTimeout的例子不会立即执行函数,而是在等待'time'指定的毫秒数之后。例如,要在3秒内显示警报:

window.setTimeout ( function() { alert ('Test'); }, 3000);

请注意,即使使用0作为时间值,函数的执行仍然会延迟到当前Javascript执行堆栈结束,这在某些情况下是有用的,但在您的情况下不是。

正如santiagoIT所说,您永远不应该依赖这种策略来执行任何依赖于已完成的特定AJAX调用的操作。相反,您应该使用回调函数。这是因为当使用计时器时,在函数执行时DOM仍然可能没有准备好(例如,如果计算机运行缓慢),这种线程问题在计算机科学中称为"竞争条件"。

要避免竞争条件,请使用回调函数。使用jQuery库的示例如下:

$.get("/url/ajax/getSomething", parameterArray, callbackFunction);
function callbackFunction(data) {
    // in this example, 'data' contains the response object
    // see each function doc to find their callback arguments
    alert ('Work with DOM here');
}

最好在ajax调用结束后执行函数。您可以注册一个成功/失败函数,该函数将在调用完成后被调用。这是正确的做法。

下面是一个jquery的例子:
$.ajax({
  url: "test.html",
  context: document.body,
  success: function(){
    // here you do whatever you want after ajax is finished
  }
});

编辑**根据下面Quentin的评论,删除了将回调函数作为字符串传递的建议,因为这确实不是一个好的做法。