退出在循环内调用的回调函数

时间:2018-05-10 01:02:04

标签: javascript loops while-loop callback break

为了好玩,我编写了这个小帮助函数,使循环更具人性化。它基本上包装了一个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")

2 个答案:

答案 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")