如何修复 while 循环中的 ESLint 错误“no-loop-func”和“no-await-in-loop”

How to fix ESLint errors 'no-loop-func' and 'no-await-in-loop' in while loop

提问人:John Taylor 提问时间:10/19/2023 最后编辑:John Taylor 更新时间:10/20/2023 访问量:61

问:

此代码按父级从深度获取子 TreeNodes,直到获得第一级节点。如何使用“no-loop-func”和“no-await-in-loop”修复 ESLint 错误,而不会产生抑制和更改规则。没有找到任何 while 循环的例子。

    const nodes = await loadNodeList();
    let buffNodes = [];
    let buff = {};    
    
    buff = await loadNodeById(id);
    
    while (!nodes.find((elm) => elm.id === buff.id)) { // Function declared in a loop contains unsafe references to variable(s) 'buff'.(no-loop-func)
      buff = await loadNodeById(buff.parent.id); // Unexpected `await` inside a loop.(no-await-in-loop)
      buffNodes.push(buff);
    }
JavaScript while 循环 eslint

评论

2赞 Quentin 10/19/2023
读过文档吗?(确保不要跳过“何时不使用它”部分)。
0赞 John Taylor 10/19/2023
@Quentin你认为这是同样的情况吗?
1赞 Quentin 10/19/2023
你是在问我 ESLint 的文档是否是你收到的 linting 消息的正确文档?no-await-in-loopno-await-in-loop
0赞 John Taylor 10/19/2023
实际上,我想知道这段代码是否正常,它运行良好,但是自从我安装了 ESLint 后,我开始问自己一个问题“我做错了什么吗?
3赞 Quentin 10/19/2023
林特人非常固执己见。阅读他们的文档以确定规则背后的原因。然后决定你是否 (a) 一般同意,以及 (b) 如果你同意,这个特定的代码是否是一个例外。

答:

0赞 gorbatkov 10/19/2023 #1

看看这个 https://eslint.org/docs/latest/rules/no-await-in-loop

快速回答

/* eslint-disable no-await-in-loop */
for (let i = 0; i <= 10; i += 1) {
  const res = await DoSomething();
}
/* eslint-enable no-await-in-loop */

另外,您可以尝试用于等待...

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for-await...of

评论

0赞 Quentin 10/19/2023
这并不能“修复”它,它会关闭检查。
0赞 John Taylor 10/19/2023
是的,但我试图在没有压制的情况下找到方法
0赞 Elvis Adomnica 10/19/2023
@JohnTaylor编辑您的 eslint 规则配置并禁用它。
0赞 John Taylor 10/19/2023
@ElvisAdomnica且不禁用规则;)
2赞 VLAZ 10/20/2023
"另外,你可以尝试用于等待......”代码没有使用异步可迭代对象,所以我认为使用它没有意义。除非您建议将代码更改为异步生成器之类的东西,否则它可能会起作用,但似乎只是为了避免 linter 错误而进行相当大的更改。