抱歉,如果之前已经在这里提出过这个问题,我找不到合适的答案。
我想创建一个 JavaScript 睡眠/延迟/等待函数,我可以在脚本中的任何位置调用它,比如 jQuery 的.delay()
我无法使用 setTimeout,因为我有一个由 php 生成的脚本,因此无法将它放入两个不同的函数中,中间有超时。我需要创建一个允许我做的函数
alert("time started");
sleep(4000);
alert("time up");
我真的不想使用 jQuery。
抱歉,如果之前已经在这里提出过这个问题,我找不到合适的答案。
我想创建一个 JavaScript 睡眠/延迟/等待函数,我可以在脚本中的任何位置调用它,比如 jQuery 的.delay()
我无法使用 setTimeout,因为我有一个由 php 生成的脚本,因此无法将它放入两个不同的函数中,中间有超时。我需要创建一个允许我做的函数
alert("time started");
sleep(4000);
alert("time up");
我真的不想使用 jQuery。
不幸的是,您不能只输入一个函数来暂停 Javascript。
你必须使用setTimeout()
例子:
function startTimer () {
timer.start();
setTimeout(stopTimer,5000);
}
function stopTimer () {
timer.stop();
}
编辑:
对于您的用户生成的倒计时,它同样简单。
HTML:
<input type="number" id="delay" min="1" max="5">
JS:
var delayInSeconds = parseInt(delay.value);
var delayInMilliseconds = delayInSeconds*1000;
function startTimer () {
timer.start();
setTimeout(stopTimer,delayInMilliseconds);
}
function stopTimer () {
timer.stop;
}
现在您只需要添加一个触发器startTimer()
,例如onchange
.
这是使用新的 async/await 语法的解决方案。
async function testWait() {
alert('going to wait for 5 second');
await wait(5000);
alert('finally wait is over');
}
function wait(time) {
return new Promise(resolve => {
setTimeout(() => {
resolve();
}, time);
});
}
注意:您只能在异步函数中调用函数等待
您将不得不使用setTimeout所以我认为您的问题是
我有一个由 PHP 生成的脚本,因此无法将其放入两个不同的函数中
是什么阻止您在脚本中生成两个函数?
function fizz() {
var a;
a = 'buzz';
// sleep x desired
a = 'complete';
}
可以改写为
function foo() {
var a; // variable raised so shared across functions below
function bar() { // consider this to be start of fizz
a = 'buzz';
setTimeout(baz, x); // start wait
} // code split here for timeout break
function baz() { // after wait
a = 'complete';
} // end of fizz
bar(); // start it
}
您会注意到a
insidebaz
从buzz
被调用时开始,在调用结束时,a
insidefoo
将是"complete"
.
基本上,将所有内容包装在一个函数中,将所有变量向上移动到该包装函数中,以便包含的函数继承它们。然后,每次遇到await NUMBER seconds
时,结束该函数并启动一个新函数以从上次中断的地方继续。echo
setTimeout
在当前浏览器中实现的 JS 中不可能实现与您指定的行为完全相同的行为。对不起。
好吧,理论上您可以创建一个带有循环的函数,其中循环的结束条件将基于时间,但这会占用您的 CPU,使浏览器无响应并且设计极差。我什至拒绝为此写一个例子;)
更新:我的答案是 -1'd(不公平),但我想我可以在 ES6 中提到(浏览器中尚未实现,Node.js 中也没有默认启用),可以编写一个同步方式的异步代码。为此,您将需要 Promise 和生成器。
您现在可以使用它,例如在带有和谐标志的 Node.js 中,使用 Q.spawn(),例如参见这篇博文(那里的最后一个示例)。
你可以使用这个 -
function sleep(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > milliseconds){
break;
}
}
}
您可以使用以下代码,它对函数进行递归调用,以便正确等待所需的时间。
function exportar(page,miliseconds,totalpages)
{
if (page <= totalpages)
{
nextpage = page + 1;
console.log('fnExcelReport('+ page +'); nextpage = '+ nextpage + '; miliseconds = '+ miliseconds + '; totalpages = '+ totalpages );
fnExcelReport(page);
setTimeout(function(){
exportar(nextpage,miliseconds,totalpages);
},miliseconds);
};
}