【发布时间】:2018-10-20 04:51:39
【问题描述】:
为了好玩,我编写了这个小辅助函数,以使循环更易于阅读。它基本上包装了一个while循环并将回调作为参数。现在,我发现自己想知道如何从回调函数中跳出 while 循环。简单地从回调中返回是行不通的,我也不能从回调中调用 break。
const loopFor = (time) => {
return {
milliseconds: (callback) => {
const start = Date.now()
while (Date.now() - start < time) {
callback()
}
}
}
}
loopFor(100).milliseconds(() => {
console.log("Weeeeeeee, I'm looping")
})
console.log("Done looping")
【问题讨论】:
-
你不能 - JS 中的用户空间是单线程的。
-
循环喜欢这些是一个非常糟糕的主意,请考虑使用
setInterval或setTimeout -
除非你想在你的回调中有某种返回值并检查你是否调用
break,否则你不能这样做。尽管如此,正如@Keith 所说,这个循环首先是一个坏主意。如果您在浏览器中运行它,它将在循环期间阻止您页面上的 所有 JavaScript 执行。 -
要扩展@Keith 的评论,这很糟糕,因为它会阻塞事件循环并且其他事情没有机会运行。这对 Node 来说并不是 不好,但你绝对应该在前端代码中避免这种情况。
-
谢谢大家,我知道它阻塞了线程。我主要在 Node 中使用它,用于运行 Monte Carlo Tree Search 之类的东西,您希望在给定时间内运行算法。在浏览器中,我使用 WebWorkers 让它在不同的线程中运行。
标签: javascript loops while-loop callback break