задержать возврат функции - PullRequest
7 голосов
/ 14 июня 2011
В любом случае

может задержать возврат функции, используя setTimeout().

function foo(){
  window.setTimeout(function(){
      //do something
  }, 500);
 //return "some thing but wait till SetTimeout() finished";
}

Ответы [ 4 ]

3 голосов
/ 14 июня 2011

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

Вы можете настроить события, которые прослушивают сигнал, запущенный через некоторое время. jQuery .bind() и .trigger() - это то, что вы хотите http://api.jquery.com/trigger/

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

function myFunc() {
  doStuff();
  result = delayProcess(5000);
  $('#result').html(result);
}

function delayProcess(delay) {
  // magic code that delays should go here
  return logic;
}

Должно быть что-то вроде этого:

function myFunc() {
  doStuff()
  delayProcess(5000, function(result){ // Notice the callback function pass as an argument
    $('#result').html(result);    
  });
}

function delayProcess(delay, callback) {
  result = logic;
  setTimeout(function(){
    callback(result);
  });
}
2 голосов
/ 14 июня 2011

.setTimeout() для запуска полной функции после тайм-аута.Это , а не для кода задержки.

https://developer.mozilla.org/En/Window.setTimeout

Хорошая ссылка будет: Что такое JavaScript-версия sleep ()?

(Хороший вопросспросить, зачем вам ваша функция, чтобы спать?)

1 голос
/ 02 февраля 2019

Использование обещаний:

const fetchData = () =>
  new Promise(resolve => (
    setTimeout(() => resolve(apiCall()), 3000);
  ));

Ответ обновлен благодаря @NikKyriakides, которые указали, что async / await не требуется.У меня изначально было async () => resolve(await apiCall()).

1 голос
/ 14 июня 2011

Просто вызовите то, что вы хотите, чтобы произошло после тайм-аута в конце функции тайм-аута, как показано ниже:

function foo()
{ 
    window.setTimeout(function()
    { 
        //do something

        delayedCode(returnValue); 
    }, 500); 

    return
}

function delayedCode(value)
{
    // do delayed stuff
}

Вместо возвращения. Поместите код, основанный на возвращаемом значении, в delayedCode() и передайте параметр в функцию.

...