Skip to content
← Back to rules

promise/prefer-catch 风格

An auto-fix is available for this rule.

它做了什么

优先使用 catch 而不是 then(a, b) 以及 then(null, b)。此规则禁止在 then 调用的第二个参数中传递参数来处理承诺错误。

为什么这是个问题?

带有两个参数的 then 调用可能会使识别是否存在错误处理程序变得更为困难。在 then 调用中使用第二个参数的另一个问题是,承诺错误处理的顺序不够明确。

例如,乍一看,可能认为 prom.then(fn1, fn2) 等价于 prom.then(fn1).catch(fn2)。但实际上它们并不等价。事实上,prom.catch(fn2).then(fn1) 才是等价的。这种混淆正是为何应优先使用显式的 catch 调用,而不是向 then 调用的第二个参数传递参数的原因。

示例

此规则的不正确代码示例:

js
prom.then(fn1, fn2);

prom.then(null, fn2);

此规则的正确代码示例:

js
prom.catch(fn2).then(fn1);

prom.catch(fn2);

如何使用

要通过配置文件或 CLI 启用此规则,可以使用:

json
{
  "plugins": ["promise"],
  "rules": {
    "promise/prefer-catch": "error"
  }
}
bash
oxlint --deny promise/prefer-catch --promise-plugin

参考资料