避免for的循环中的函数声明

时间:2017-09-14 21:19:19

标签: javascript node.js promise

Eslint警告我不要在for循环中定义函数,我知道它是这样做的,因为它会为每次迭代定义该函数,这显然是坏的。但是在我的情况下,我不确定如何重写代码,这样就不再需要了。

function refreshProfiles(job, done) {
  let isFinished = false
  for (let i = 0; i < 100; i++) {
    // Get PlayerProfile promise and snapshot these
    const p = PlayerProfile.findOneAndUpdate(filter, updateDoc).then((profile) => {
      if (!profile) {
        isFinished = true
      }
      return refreshPlayerProfileIntoHistory(profile)
    }).catch((err) => {
      // Error handling
    })
    promiseArray.push(p)
  }

  return Promise.all(promiseArray).then(() => {
    // Recursive function call if we are not finished yet
    if (isFinished) {
      done()
    } else {
      // Recursive function call
      refreshProfiles()
    }
  })
}

TL; DR代码执行的操作:一旦找不到配置文件,它应该在递归函数调用时停止。

问题:

我如何避免在for循环中为这个特定情况定义函数,我需要访问一个变量(isFinished bool),它位于我在循环中定义的函数之外?

1 个答案:

答案 0 :(得分:0)

isFinished标志和函数移出refreshProfiles并进入父闭包(以便两个函数都可以访问它)。每当首次从外部调用函数时,请务必将isFinished重置为false