promise/no-return-wrap 风格
它的作用
防止在使用 Promise.resolve 或 Promise.reject 时对返回值进行不必要的包装。
此规则强制执行以下立场:
当需要解析一个承诺时,与其返回
Promise.resolve(value),不如直接返回原始值return value。当需要拒绝一个承诺时,与其返回
Promise.reject(error),不如直接抛出原始错误值throw error。
该规则提供了一个选项,可关闭对第 2 点的强制执行,详见下方选项部分。
为什么这是不好的?
在 then 和 catch 回调函数的返回语句中,将原始值转换为承诺时,使用 Promise.resolve 和 Promise.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