是否有可能在有限的时间内暂停执行javascript?等待是我遇到的最接近的事情,但它仍然不会停止当前执行的javascript。我实际上尝试忙于等待一个变量,但在这种情况下,它无法从繁忙的等待循环中走出来。此外,我甚至不知道在javascript中是否可以暂停/停止,因为它是单线程的。
我正在尝试的确切场景:
inside a callback() {
<make 2 ajax requests, wait for response>
<stop for sometime until one of the response is received>
return <redirect page using response received>
}
请注意,回调只能被调用一次,它应该返回一个重定向url,如果没有给出返回,页面实际上会重定向到默认回退。所以我想暂停一段时间来实际等待这个回调中的事件。
答案 0 :(得分:2)
你当然可以在异步场景中实现它(通过模拟它)。当您将任务推迟到将来某个时间时,事件循环将会将其提取。
const sleep = t => new Promise(res => setTimeout(res, t))
const main = async _ => {
/*do something*/
await sleep(3000) //3 seconds
/*rest of the stuff*/
}
const sleep = t => new Promise(res => setTimeout(res, t))
const main = _ => {
doSometasks().then(_ => sleep(3000)).then(someClosingTasks)
}
注意: doSometasks()
必须返回承诺(someClosingTasks()
可能会或可能不会返回承诺) < / p>
答案 1 :(得分:0)
我认为您可以使用setTimeout
创建js生成器和(重新)计划执行,直到生成器完成。
你可以使用同步XHR请求来阻止执行而不需要繁忙的循环,但是在任何情况下如果你的方法中的js被阻止,条件就没有机会被改变,所以你必须允许执行微任务/ macrotasks取决于你真的需要。