Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 退出在循环中调用的回调函数_Javascript_Loops_While Loop_Callback_Break - Fatal编程技术网

Javascript 退出在循环中调用的回调函数

Javascript 退出在循环中调用的回调函数,javascript,loops,while-loop,callback,break,Javascript,Loops,While Loop,Callback,Break,为了好玩,我编写了这个小助手函数,使循环更具可读性。它基本上包装了一个while循环,并将回调作为参数。现在,我想知道如何从回调函数中打破while循环。简单地从回调中返回将不起作用,我也不能从回调中调用break const loopFor=(时间)=>{ 返回{ 毫秒:(回调)=>{ const start=Date.now() while(Date.now()-开始{ log(“Weeeeeee,我在循环”) }) log(“完成循环”)我认为这不是一种可取的方法,但如果必须继续使用这种

为了好玩,我编写了这个小助手函数,使循环更具可读性。它基本上包装了一个while循环,并将回调作为参数。现在,我想知道如何从回调函数中打破while循环。简单地从回调中返回将不起作用,我也不能从回调中调用break

const loopFor=(时间)=>{
返回{
毫秒:(回调)=>{
const start=Date.now()
while(Date.now()-开始<时间){
回调函数()
}
}
}
}
循环时间(100).毫秒(()=>{
log(“Weeeeeee,我在循环”)
})

log(“完成循环”)
我认为这不是一种可取的方法,但如果必须继续使用这种方法,则必须围绕提供一些返回值来中断while循环来设计回调

例如

const loopFor=(时间)=>{
返回{
毫秒:(回调)=>{
const start=Date.now()
while(Date.now()-开始<时间){
如果(!callback()){//Break如果回调返回false
打破
}
}
}
}
}
循环时间(100).毫秒(()=>{
log(“Weeeeeee,我在循环”)
设条件=1>5//一些基本条件
返回条件
})

log(“完成循环”)
我认为这不是一种可取的方法,但如果必须继续使用这种方法,则必须围绕提供一些返回值来中断while循环来设计回调

例如

const loopFor=(时间)=>{
返回{
毫秒:(回调)=>{
const start=Date.now()
while(Date.now()-开始<时间){
如果(!callback()){//Break如果回调返回false
打破
}
}
}
}
}
循环时间(100).毫秒(()=>{
log(“Weeeeeee,我在循环”)
设条件=1>5//一些基本条件
返回条件
})

log(“完成循环”)
您可以从回调返回

const loopFor=(时间)=>{
返回{
毫秒:(回调)=>{
const start=Date.now()
while(Date.now()-start{
log(“Weeeeeee,我在循环”)
如果(--计数器==0)返回false
返回真值
})

log(“完成循环”)
您可以从回调返回

const loopFor=(时间)=>{
返回{
毫秒:(回调)=>{
const start=Date.now()
while(Date.now()-start{
log(“Weeeeeee,我在循环”)
如果(--计数器==0)返回false
返回真值
})

console.log(“Done looping”)
你不能-JS中的userland是单线程的。像这样的循环是一个非常糟糕的主意,请研究使用
setInterval
setTimeout
除非你想在回调中有某种返回值,并检查你是否调用
break
,否则你不能这样做。不过,正如@Keith所说,这个循环从一开始就是个坏主意。如果您在浏览器中运行此操作,它将在循环期间阻止页面上的所有JavaScript执行。若要扩展@Keith的注释,这是不好的,因为它将阻止事件循环,而其他内容将无法运行。这对Node并没有那么糟糕,但在前端代码中应该绝对避免这种情况。谢谢各位,我知道它会阻塞线程。我主要在Node中使用它,用于运行montecarlo树搜索和类似的东西,在这里,您希望在给定的时间内运行算法。在浏览器中,我使用WebWorkers使它在不同的线程中运行。你不能-JS中的userland是单线程的。像这样的循环是一个非常糟糕的主意,研究使用
setInterval
setTimeout
除非您希望在回调中有某种返回值,并检查是否调用
break
,否则无法执行此操作。不过,正如@Keith所说,这个循环从一开始就是个坏主意。如果您在浏览器中运行此操作,它将在循环期间阻止页面上的所有JavaScript执行。若要扩展@Keith的注释,这是不好的,因为它将阻止事件循环,而其他内容将无法运行。这对Node并没有那么糟糕,但在前端代码中应该绝对避免这种情况。谢谢各位,我知道它会阻塞线程。我主要在Node中使用它,用于运行montecarlo树搜索和类似的东西,在这里,您希望在给定的时间内运行算法。在浏览器中,我使用WebWorkers使其在不同的线程中运行。