我希望在经过一段时间后返回该功能。在我的函数下面,返回的东西不起作用(警报被触发)。
问题在于我的 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");
}
谢谢!
答案 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)
您可以将睡眠放置一段时间,然后将返回语句放在后面 睡觉。
所以它会在经过一段时间后从函数返回。