Skip to content
← Back to rules

promise/no-return-wrap Style

🚧 An auto-fix is planned for this rule, but not implemented at this time.

说明

防止在 promises 中不必要地使用 Promise.resolvePromise.reject 包装返回值。

此规则强制执行以下观点:

  1. 当一个 promise 要被 resolve 时,与其返回 Promise.resolve(value),不如 直接返回原始值 return value

  2. 当一个 promise 要被 reject 时,与其返回 Promise.reject(error),不如 像 throw error 一样直接抛出原始错误值。

可以通过一个选项来关闭第 2 条的强制检查,详见下方配置部分。

这为什么不好?

thencatch 回调的 return 语句中,使用 Promise.resolvePromise.reject 将原始值转换为 promise 是不必要的。使用这些操作来把原始值转换为 promise 并无必要, 因为在成功情况下直接返回原始值,在失败情况下抛出原始错误值,效果是相同的。 因此,有些人认为返回诸如 Promise.resolve(1)Promise.reject(err) 这样的写法 只是语法噪音。

示例

此规则的错误代码示例:

js
myPromise().then(() => Promise.resolve(4));
myPromise().then(function () {
  return Promise.resolve(4);
});

myPromise().then(() => Promise.reject("err"));
myPromise().then(function () {
  return Promise.reject("err");
});
js
myPromise().catch(function () {
  return Promise.reject("err");
});
js
myPromise().finally(function () {
  return Promise.reject("err");
});
js
myPromise().finally(() => Promise.resolve(4));

此规则的正确代码示例:

js
myPromise().then(() => 4);
myPromise().then(function () {
  return 4;
});

myPromise().then(() => throw "err");
myPromise().then(function () {
  throw "err";
});
js
myPromise().catch(function () {
  throw "err";
});
js
myPromise().finally(() => 4);

配置

此规则接受一个具有以下属性的配置对象:

allowReject

type: boolean

default: false

allowReject 允许在 promise 处理器内部返回 Promise.reject

当将 allowReject 设置为 true 时,以下是正确代码示例:

js
myPromise().then(function () {
  return Promise.reject(0);
});
js
myPromise()
  .then()
  .catch(() => Promise.reject("err"));

如何使用

To enable this rule using the config file or in the CLI, you can use:

json
{
  "plugins": ["promise"],
  "rules": {
    "promise/no-return-wrap": "error"
  }
}
ts
import { defineConfig } from "oxlint";

export default defineConfig({
  plugins: ["promise"],
  rules: {
    "promise/no-return-wrap": "error",
  },
});
bash
oxlint --deny promise/no-return-wrap --promise-plugin

版本

此规则于 v0.15.14 中添加。

参考