#code_pattern #nodejs_api
TL;DR Используйте
no-floating-promises и unhandledRejectionFloating (не отловленный, плавающий) promise как правило указывает на ошибку в коде. Если внутри Floating promise произойдет ошибка, то #nodejs процесс аварийно завершит работу. Для отлавливания таких событий существует
unhandledRejection. Пример из документации:process.on('unhandledRejection', (reason, promise) => { console.log('Unhandled Rejection at:', promise, 'reason:', reason);});Отлавливать Floating promise лучше не в run time, а с помощью линтера. Для этого существуют правила:
➡️ в eslint
➡️ в typescript-eslint
➡️ тут мог бы быть tslint, но его уже нельзя использовать.
В определенных случаях, бизнес логика не требует ожидания завершения промиса. Тогда необходимо использовать комментарий в коде, указывающий линтеру игнорировать ошибку. Вот пример, когда REST не дожидается отправки емейла новому пользователю.
import { usersRepository } from '~/repositories';import { sendConfirmationEmail } from '~/services/notifications';import logger from '~/logger';// pseudo route handlerexport async function registerUser(data: newUserDTO): { const user = await usersRepository.create(data); // eslint-disable-next-line @typescript-eslint/no-floating-promises sendConfirmationEmail(user) .catch(err => logger({err, user}, 'Error during sending confirmation email'); return user;}