typescript/no-floating-promises 正确性
它的作用
此规则禁止在 TypeScript 代码中使用“悬空”Promise,即创建了但没有任何代码处理其解决或拒绝的 Promise。
该规则会报告以下未被正确处理的返回值为 Promise 的语句:
- 使用两个参数调用其
.then() - 使用一个参数调用其
.catch() await它return它void它
此外,当创建包含 Promise 的数组但未正确处理时,该规则也会报告问题。主要解决方法是使用某个 Promise 并发方法生成一个单一的 Promise,然后按照上述方式处理它。这些方法包括:
Promise.all()Promise.allSettled()Promise.any()Promise.race()
为什么这是不好的?
悬空的 Promise 可能导致多个问题,例如操作顺序不当、忽略 Promise 拒绝等。
示例
以下为 错误 的代码示例:
ts
const promise = new Promise((resolve, reject) => resolve("value"));
promise;
async function returnsPromise() {
return "value";
}
returnsPromise().then(() => {});
Promise.reject("value").catch();
Promise.reject("value").finally();
[1, 2, 3].map(async (x) => x + 1);以下为 正确 的代码示例:
ts
const promise = new Promise((resolve, reject) => resolve("value"));
await promise;
async function returnsPromise() {
return "value";
}
void returnsPromise();
returnsPromise().then(
() => {},
() => {},
);
Promise.reject("value").catch(() => {});
await Promise.reject("value").finally(() => {});
await Promise.all([1, 2, 3].map(async (x) => x + 1));配置
此规则接受一个配置对象,包含以下属性:
allowForKnownSafeCalls
type: array
default: []
允许忽略特定调用,指定为类型或值规范。
allowForKnownSafeCalls[n]
type: string
用于匹配特定声明的类型或值规范
支持四种类型的规范:
- 字符串规范(已弃用):按名称进行通用匹配
json
"Promise"- 文件规范:匹配本地文件中声明的类型/值
json
{ "from": "file", "name": "MyType" }
{ "from": "file", "name": ["Type1", "Type2"] }
{ "from": "file", "name": "MyType", "path": "./types.ts" }- 库规范:匹配 TypeScript 内置库类型
json
{ "from": "lib", "name": "Promise" }
{ "from": "lib", "name": ["Promise", "PromiseLike"] }- 包规范:匹配 npm 包中的类型/值
json
{ "from": "package", "name": "Observable", "package": "rxjs" }
{ "from": "package", "name": ["Observable", "Subject"], "package": "rxjs" }allowForKnownSafePromises
type: array
default: []
允许忽略特定的 Promise 类型,指定为类型或值规范。
allowForKnownSafePromises[n]
type: string
用于匹配特定声明的类型或值规范
支持四种类型的规范:
- 字符串规范(已弃用):按名称进行通用匹配
json
"Promise"- 文件规范:匹配本地文件中声明的类型/值
json
{ "from": "file", "name": "MyType" }
{ "from": "file", "name": ["Type1", "Type2"] }
{ "from": "file", "name": "MyType", "path": "./types.ts" }- 库规范:匹配 TypeScript 内置库类型
json
{ "from": "lib", "name": "Promise" }
{ "from": "lib", "name": ["Promise", "PromiseLike"] }- 包规范:匹配 npm 包中的类型/值
json
{ "from": "package", "name": "Observable", "package": "rxjs" }
{ "from": "package", "name": ["Observable", "Subject"], "package": "rxjs" }checkThenables
type: boolean
default: false
检查非严格意义上的 Promise 但具有 thenable 行为的对象。
ignoreIIFE
type: boolean
default: false
忽略立即执行的函数表达式(IIFEs)。
ignoreVoid
type: boolean
default: true
忽略作为 void 表达式的 Promise。
如何使用
要通过配置文件或 CLI 启用此规则,可以使用:
json
{
"rules": {
"typescript/no-floating-promises": "error"
}
}bash
oxlint --type-aware --deny typescript/no-floating-promises