延迟函数的返回

时间:2011-06-14 04:42:43

标签: javascript delay settimeout

无论如何都要使用setTimeout()来延迟函数的返回。

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

4 个答案:

答案 0 :(得分:3)

您不希望“延迟”代码,因为它会锁定浏览器线程,使您的整个浏览器无法使用,直到您的脚本超时为止。

您可以设置一个事件来监听一段时间过后触发的信号。 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);
  });
}

答案 1 :(得分:2)

.setTimeout()用于在超时后运行完整的函数。延迟代码

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

一个好的链接是:What is the JavaScript version of sleep()?

(一个很好的问题是为什么你需要你的功能睡觉?)

答案 2 :(得分:1)

在超时函数结束时超时后调用你想要发生的事情,如下所示:

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

        delayedCode(returnValue); 
    }, 500); 

    return
}

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

而不是回归。将依赖返回值的代码放入delayedCode()并将参数传递给函数。

答案 3 :(得分:1)

使用承诺:

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

<子>答更新感谢谁指出异步/ AWAIT是没有必要的@NikKyriakides。我最初有async () => resolve(await apiCall())