javascript:变量更新后在稍后时间点执行的函数

Joh*_*ohn 2 javascript function

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

使用

  setTimeout(function(){},time);
Run Code Online (Sandbox Code Playgroud)

被评估并function()立即执行。

我正在寻找一种function()在 x 秒内执行的方法,例如在从 ajax 调用更新 dom 之后。

这是怎么做的?

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

为了清楚起见,如果您在 function() 中做了类似的事情;

      var a= document.getElementbyId("anid").innerHTML;
Run Code Online (Sandbox Code Playgroud)

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

谢谢...

jjm*_*tes 5

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

window.setTimeout ( function() { alert ('Test'); }, 3000);
Run Code Online (Sandbox Code Playgroud)

请注意,即使您使用 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');
}
Run Code Online (Sandbox Code Playgroud)