为了好玩,我编写了这个小帮助函数,使循环更具人性化。它基本上包装了一个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")
答案 0 :(得分:1)
我不认为这是一种可行的方法,但如果你必须继续这种方法,你将不得不设计你的回调提供一些返回值来打破while循环。
E.g
?*
答案 1 :(得分:1)
你可以从回调
返回
const loopFor = (time) => {
return {
milliseconds: (callback) => {
const start = Date.now()
while (Date.now() - start < time && callback());
}
}
}
let counter = 5;
loopFor(100).milliseconds(() => {
console.log("Weeeeeeee, I'm looping")
if(--counter==0)return false
return true
})
console.log("Done looping")
或者你可以抛出异常
class LoopEnd{}
const loopFor = (time) => {
return {
milliseconds: (callback) => {
const start = Date.now()
try{while (Date.now() - start < time)callback();}
catch(e){if(!(e instanceof LoopEnd))throw e;}
}
}
}
let counter = 5;
loopFor(100).milliseconds(() => {
console.log("Weeeeeeee, I'm looping")
if(--counter==0)throw new LoopEnd()
})
console.log("Done looping")