在不杀死处理器的情况下实现javascript延迟

时间:2010-03-10 10:51:55

标签: javascript ajax

我希望在经过一段时间后返回该功能。在我的函数下面,返回的东西不起作用(警报被触发)。

问题在于我的 handleRequestStateChange 我初始化myArray。

function() {    
  xmlHttp.open("POST", "xxx", true);
  xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  xmlHttp.setRequestHeader("Content-Length", 10);
  xmlHttp.onreadystatechange = handleRequestStateChange;
  xmlHttp.send(locParam);

  setTimeout(function() { return myArray; }, 5000);
  alert("end sleep"); 
}

谢谢!

2 个答案:

答案 0 :(得分:2)

如您所知,定时器会延迟到线程的后期,但调用它们的函数会立即继续执行。如果不锁定浏览器并阻止用户与浏览器交互,就无法延迟当前正在执行的功能。

这是回调点发挥作用的地方。您不是试图延迟继续执行代码,而是提供一个函数作为“延迟”函数的参数,当它有必要的数据就绪时,它会以数据作为参数执行回调函数。

function submitRequest(callback) {     
  xmlHttp.open("POST", "xxx", true); 
  xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
  xmlHttp.setRequestHeader("Content-Length", 10); 
  xmlHttp.onreadystatechange = function ()
  {
    if (xmlHttp.readyState == 4 && xml.status == 200)
    {
      var myArray;
      // do something with data
      callback(myArray);  // execute the callback function
    }
  }; 
  xmlHttp.send(locParam); 
} 

function someCallingFunction()
{
  // call submitRequest with an anonymous function as the callback parameter
  submitRequest(function (myArray)  
  {
    alert("end sleep");  
    // do something with myArray
  });
}

答案 1 :(得分:0)

您可以将睡眠放置一段时间,然后将返回语句放在后面 睡觉。

所以它会在经过一段时间后从函数返回。