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),它位于我在循环中定义的函数之外?
答案 0 :(得分:0)
将isFinished
标志和函数移出refreshProfiles
并进入父闭包(以便两个函数都可以访问它)。每当首次从外部调用函数时,请务必将isFinished
重置为false
。