无论如何都要使用setTimeout()
来延迟函数的返回。
function foo(){
window.setTimeout(function(){
//do something
}, 500);
//return "some thing but wait till SetTimeout() finished";
}
答案 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())
。