是否有可能在有限的时间内停止执行javascript?

时间:2017-05-05 19:26:41

标签: javascript

是否有可能在有限的时间内暂停执行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,如果没有给出返回,页面实际上会重定向到默认回退。所以我想暂停一段时间来实际等待这个回调中的事件。

2 个答案:

答案 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取决于你真的需要。