`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() ```