为什么 ESLint 使用纤程会在 while(true) 上触发 lint 错误?

问题描述 投票:0回答:2

我的 JS 代码带有一些无限循环(我们使用节点纤维来允许事情发生)。

ESLint 讨厌:

while (true) {

}

因为条件不变。

以下行为是允许的:

for(;;) {

}

除了喂养 lintbeast 之外,是否还有任何客观理由支持

for
而不是
while
(反之亦然)?

注意:这个问题明确要求客观原因,因此不仅仅是基于意见。

javascript eslint node-fibers
2个回答
11
投票

这些关于无限循环的规则来自于生成器出现之前,甚至不知道纤维。

假设每个函数都不会挂起并返回(如生成器、

async
-关键字函数或纤程),该规则对于警告循环中的常量非常有意义。

现在时代已经变了 - 规则不再有意义,而你所做的却完全没问题。

如果我们检查 eslint 存储库,它会被讨论并同时被认为“不够重要,无法承认”:

我认为这作为内置异常没有意义。如果您这样做,那么最好使用注释手动禁用生成器中的规则。

建议了解决方法

for(;;)
,但每个参与人员都明白这是针对这种特殊情况的黑客攻击。

禁用该规则。


0
投票

eslint 的

no-constant-condition
规则确实允许您通过配置
while (true)
来忽略
checkLoops: "allExceptWhileTrue"
循环。

将此配置添加到您的

.estlintrc
JSON 文件或等效文件中:

{
  "rules": {
         "no-constant-condition": ["error", { "checkLoops": "allExceptWhileTrue" }]
  }
}

或者,您可以在 JavaScript 文件本身中添加注释:

/*eslint no-constant-condition: ["error", { "checkLoops": "allExceptWhileTrue" }]*/

while (true) {
    doSomething();
};
© www.soinside.com 2019 - 2024. All rights reserved.