---
url: /docs/guide/usage/linter/rules/promise/prefer-catch.md
---

### 作用

优先使用 `catch` 而不是 `then(a, b)` 和 `then(null, b)`。此规则不允许在 `then` 调用的第二个参数中传入参数来处理 promise 错误。

### 为什么这不好？

带有两个参数的 `then` 调用会让人更难识别其中存在 catch 错误处理器。另一个在 `then` 调用中使用第二个参数的问题是，promise 错误处理的顺序不够明显。

例如，乍一看似乎 `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);
```

## 如何使用

## 版本

此规则添加于 v0.15.14。

## 参考资料
