Реализуйте задержку в javascript, не убивая процессор - PullRequest
2 голосов
/ 10 марта 2010

Я хочу вернуть функцию, когда пройдет определенное время. В моей функции ниже возвращаемая вещь не работала (сработало предупреждение).

Дело в том, что в моем handleRequestStateChange я инициализирую мой Array.

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 ]

2 голосов
/ 10 марта 2010

Как вы знаете, таймеры задерживаются на потом в потоке, но вызывающая их функция продолжает выполняться сразу же. Невозможно отложить выполнение текущей функции без блокировки браузера и предотвращения взаимодействия пользователя с браузером.

Здесь вступают в игру точки обратного вызова. Вместо того, чтобы пытаться отложить продолжение выполнения кода, вы предоставляете функцию в качестве параметра для функции «задержки», а когда у нее есть необходимые данные, готовые, она выполняет функцию обратного вызова с данными в качестве параметра.

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
  });
}
0 голосов
/ 10 марта 2010

Вы можете поставить сон на определенное время, а затем поставить оператор возврата после сон.

Чтобы он вернулся из функции через некоторое время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...