await someAsyncFn().catch() створює Unhandled Promise Rejection, тобто аргумент у catch() є обов'язковим.Я вже розповідав про Floating Promise. Вони створють Unhandled Promise Rejection. Щоб знаходити такі проблеми я використовую
@typescript-eslint/no-floating-promises. Це правило говорить, щоб не було Floating Promise треба зробити одне з: –
await цього promise-а–
return цього promise-а– додати до цього promise chain
.then() з двома аргументами– додати до цього promise chain
.catch() з одним аргументомЯ вважав, що
try catch та catch у promise chain працюють однаково. Тому для мене було несподіванкою, що await someAsyncFn().catch() не перехоплює помилку, що створює Unhandled Promise Rejection. Так само станеться якщо аргумент у catch буде null або undefined. Catch це синтаксичний цукор then(undefined, cb). Змінюючи цей cb ми контролюємо поведінку promise chain, тому cb не є обов'язковим.Для мене це виглядає, як бага у
@typescript-eslint/no-floating-promises. Як тимчасове рішення я додав таке правило:'no-restricted-syntax': [ 'error', { selector: "CallExpression[callee.property.name='catch'][arguments.length!=1]", message: 'Catch should have exactly one argument' }],PS Велика подяка Віктору та Олексію за коментарі.