From 224b1e1b514397ad46a99a7509b07fb6db0eba6e Mon Sep 17 00:00:00 2001 From: Roman Bekkiev Date: Mon, 29 Nov 2021 08:33:08 +0200 Subject: [PATCH] fix event emitter leak warning --- src/telegramServer.ts | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/telegramServer.ts b/src/telegramServer.ts index 24f999f..1b90d53 100644 --- a/src/telegramServer.ts +++ b/src/telegramServer.ts @@ -217,29 +217,37 @@ export class TelegramServer extends EventEmitter { } } - /** - * @FIXME - * (node:103570) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 - * EditedMessageText listeners added to [TelegramServer]. Use emitter.setMaxListeners() to - * increase limit (Use `node --trace-warnings ...` to show where the warning was created) - */ async waitBotEdits() { return new Promise((resolve) => { - this.on('EditedMessageText', () => resolve()); + const handler = () => { + this.off('EditedMessageText', handler); + resolve(); + }; + this.on('EditedMessageText', handler); }); } async waitBotMessage() { return new Promise((resolve) => { - this.on('AddedBotMessage', () => resolve()); + const handler = () => { + this.off('AddedBotMessage', handler); + resolve(); + }; + this.on('AddedBotMessage', handler); }); } async waitUserMessage() { return new Promise((resolve) => { - this.on('AddedUserMessage', () => resolve()); - this.on('AddedUserCommand', () => resolve()); - this.on('AddedUserCallbackQuery', () => resolve()); + const messageHandler = () => { + this.off('AddedUserMessage', messageHandler); + this.off('AddedUserCommand', messageHandler); + this.off('AddedUserCallbackQuery', messageHandler); + resolve(); + }; + this.on('AddedUserMessage', messageHandler); + this.on('AddedUserCommand', messageHandler); + this.on('AddedUserCallbackQuery', messageHandler); }); }