繁体   English   中英

避免在for循环中声明函数

[英]Avoid function declaration in for loops for promises

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)?

isFinished标志和函数移出refreshProfiles并移到父闭包中(以便两个函数都可以访问它)。 每当首次在外部调用该函数时,请确保将isFinished重置为false

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM