`lint.nursery.noFloatingPromises` を指定する。
`biome.json`
```json
{
"linter": {
"rules": {
"nursery": {
"noFloatingPromises": "error"
}
}
}
}
```
## 効果
[[Promise (JavaScript)|Promise]]を返す関数 `asyncFunc()` があったとき
```ts
// libs.ts
export async function asyncFunc(): Promise<string> {
return "Async Function Executed";
}
```
**[[await (JavaScript)|await]]や[[Promiseチェーン]]で処理をしていなかったり、変数への代入やreturnをしていない関数の場合は** 呼び出しエラーになる。
```ts
// A "floating" Promise was found, meaning it is not properly handled and could lead to ignored errors or unexpected behavior. [lint/nursery/noFloatingPromises]
asyncFunc();
```
## エラーにならないケースと理由
一部のケースでしかエラーにしないのは理由がある。
### catchが呼び出されているとき
[[Promise (JavaScript)|Promise]]であることを意図したコードになっているため不要。
```ts
asyncFunc().catch(() => {});
```
または
```ts
asyncFunc()
.then(() => {})
.catch(() => {});
```
### thenで2つの引数が指定されているとき
同上。
```ts
asyncFunc().then(
() => {},
() => {},
);
```
### returnされているとき
意図的に[[Promise (JavaScript)|Promise]]を返却している可能性があるため。`func()` の戻り値を他に渡す際に型エラーで検知できる可能性も高い。
```ts
function func() {
return asyncFunc()
}
```
### 変数に代入されているとき
意図的に[[Promise (JavaScript)|Promise]]を代入している可能性があるため。変数代入の際に型エラーで検知できる可能性も高い。
```ts
const r = asyncFunc()
```