我有一段代码需要在一些延迟后执行,比如5000 ms.Currently,我使用的是setTimeout,但它是异步的,我想让执行等待它的返回。我已经尝试使用以下几种方法:
function pauseComp(ms)
{
var curr = new Date().getTime();
ms += curr;
while (curr < ms) {
curr = new Date().getTime();
}
} 但是我想延迟的代码是使用raphaeljs绘制一些对象,并且显示一点都不流畅。我正在尝试使用doTimeout插件。我只需要有一次延迟,因为延迟和要延迟的代码都在循环中。我没有id的要求,所以我没有使用它。例如:
for(i; i<5; i++){ $.doTimeout(5000,function(){
alert('hi'); return false;}, true);}这在给出第一个Hi之前等待5秒,然后连续的循环迭代在第一个Hi之后立即显示警报。我希望它做的是等待5秒,再次发出警报,等待,然后发出警报,以此类推。
如有任何提示/建议,欢迎光临!
发布于 2016-08-09 05:50:35
与这个答案一样好的公认答案的变体。
此外,我同意首选setTimeout和异步函数调用的注意事项,但有时,例如,在构建测试时,您只需要一个同步等待命令……
function wait(ms) {
var start = Date.now(),
now = start;
while (now - start < ms) {
now = Date.now();
}
}如果你想以秒为单位,在while check上将开始ms除以1000 ...
发布于 2018-11-24 03:47:51
如果您想利用新的async/await语法,您可以将set timeout转换为promise,然后等待它。
function wait(ms) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log("Done waiting");
resolve(ms)
}, ms )
})
}
(async function Main() {
console.log("Starting...")
await wait(5000);
console.log("Ended!")
})();发布于 2019-10-21 03:29:33
同步等待(仅用于测试!):
const syncWait = ms => {
const end = Date.now() + ms
while (Date.now() < end) continue
}用法:
console.log('one')
syncWait(5000)
console.log('two')异步等待:
const asyncWait = ms => new Promise(resolve => setTimeout(resolve, ms))用法:
(async () => {
console.log('one')
await asyncWait(5000)
console.log('two')
})()替代(异步):
const delayedCall = (array, ms) =>
array.forEach((func, index) => setTimeout(func, index * ms))用法:
delayedCall([
() => console.log('one'),
() => console.log('two'),
() => console.log('three'),
], 5000)https://stackoverflow.com/questions/6921895
复制相似问题