Skip to content
← Back to rules

promise/no-return-wrap 风格

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

它的作用

防止在使用 Promise.resolvePromise.reject 时对返回值进行不必要的包装。

此规则强制执行以下立场:

  1. 当需要解析一个承诺时,与其返回 Promise.resolve(value),不如直接返回原始值 return value

  2. 当需要拒绝一个承诺时,与其返回 Promise.reject(error),不如直接抛出原始错误值 throw error

该规则提供了一个选项,可关闭对第 2 点的强制执行,详见下方选项部分。

为什么这是不好的?

thencatch 回调函数的返回语句中,将原始值转换为承诺时,使用 Promise.resolvePromise.reject 是多余的。因为对于成功情况直接返回原始值,对于失败情况直接抛出原始错误值,其效果是相同的。因此,有些人认为返回像 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.reject

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

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

如何使用

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

json
{
  "plugins": ["promise"],
  "rules": {
    "promise/no-return-wrap": "error"
  }
}
bash
oxlint --deny promise/no-return-wrap --promise-plugin

参考资料