Angular & Eslint - this.router.navigate(['/']) 的 no-floating-promises 错误

Posted

技术标签:

【中文标题】Angular & Eslint - this.router.navigate([\'/\']) 的 no-floating-promises 错误【英文标题】:Angular & Eslint - no-floating-promises error with this.router.navigate(['/'])Angular & Eslint - this.router.navigate(['/']) 的 no-floating-promises 错误 【发布时间】:2021-07-08 12:08:53 【问题描述】:

我遇到以下 eslint 错误:

Promise 必须得到适当处理或明确标记为忽略 与void operator.eslint@typescript-eslint/no-floating-promises

使用此代码:

this.router.navigate(['/']);

路由器是这样导入的:import Router from '@angular/router'; 并在类的构造函数中分配。

我的 eslint 配置:

module.exports = 
  extends: [
    "plugin:@angular-eslint/recommended",
    "eslint:recommended",
    "plugin:@typescript-eslint/recommended",
    "plugin:@typescript-eslint/recommended-requiring-type-checking",
    // "plugin:@angular-eslint/template/process-inline-templates",
    'prettier',
  ],
  parser: '@typescript-eslint/parser',
  parserOptions: 
    project: './tsconfig.eslint.json',
    sourceType: 'module',
    ecmaVersion: 2020,
  ,
  plugins: ['@typescript-eslint', '@angular-eslint', 'prettier'],
  rules: 
    "prettier/prettier": [
      "error",
      
        "printWidth": 140,
        "singleQuote": true,
        "useTabs": false,
        "tabWidth": 2,
        "semi": true,
        "bracketSpacing": true,
        "endOfLine": "lf"
      ,
    ],
  ,
;

是我的配置错误还是有什么问题?我觉得 router.navigate 不应该是 Angular 项目中的 eslint 错误。

【问题讨论】:

【参考方案1】:

规则#no-floating-promises 说:

此规则禁止在不处理的情况下在语句中使用类似 Promise 的值 他们的错误适当

所以这里你没有正确处理this.router.navigate,因为它返回一个Promise

您可以:

    等待它返回

    await this.router.navigate(['/']);
    

    明确将其标记为故意不等待

    void this.router.navigate(['/']);
    

    禁用此特定行的规则

    // eslint-disable-next-line @typescript-eslint/no-floating-promises
    this.router.navigate(['/']);
    

【讨论】:

我喜欢第二个选项。谢谢。 对于持续收到此 lint 错误并一直试图弄清楚如何处理它的其他任何人,有第 4 个选项:将 .then().catch() 代码链接到函数调用。 【参考方案2】:

我在 eslint 配置中添加了 '@typescript-eslint/no-floating-promises': 'warn' 规则。

【讨论】:

是的,但我仍然收到一条警告消息。我希望 router.navigate 根本没有警告。但在其他地方,错误/警告可能有用,这就是我不想关闭该规则的原因。 是的,我理解,这就是我没有完全关闭该规则的原因。但是我不确定如何有条件地关闭它

以上是关于Angular & Eslint - this.router.navigate(['/']) 的 no-floating-promises 错误的主要内容,如果未能解决你的问题,请参考以下文章

Angular Eslint 配置未扩展 Project Eslint 配置

eslint angular - 找不到 .eslintrc

将 @angular-eslint/template/eqeqeq 设置为 off 不适用于 angular 13

如何配置 ESLint 以遵循 Angular 最佳实践?

@angular-eslint/template/eqeqeq 禁用或允许 null

如何在 Angular 中将 i18n 模板用于 eslint?