From 30fcacea84d9aefbe71e7f4b48506a088f2e1bf8 Mon Sep 17 00:00:00 2001 From: balag3 Date: Fri, 28 Jul 2023 09:39:11 +0200 Subject: [PATCH] fix: Refactors message decoding to abort as soon as a suitable decoder found (#1414) * Refactors message decoding to abort as soon as a suitable decoder found. #1369 * fix: return from the function * improve readability --------- Co-authored-by: Danish Arora <35004822+danisharora099@users.noreply.github.com> Co-authored-by: danisharora099 --- packages/core/src/lib/filter/index.ts | 28 +++++++++++---------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/packages/core/src/lib/filter/index.ts b/packages/core/src/lib/filter/index.ts index e17654a55a..02f44952fe 100644 --- a/packages/core/src/lib/filter/index.ts +++ b/packages/core/src/lib/filter/index.ts @@ -384,23 +384,17 @@ async function pushMessage( return; } - let didDecodeMsg = false; - // We don't want to wait for decoding failure, just attempt to decode - // all messages and do the call back on the one that works - // noinspection ES6MissingAwait - for (const dec of decoders) { - if (didDecodeMsg) break; - const decoded = await dec.fromProtoObj( - pubSubTopic, - message as IProtoMessage + try { + const decodePromises = decoders.map((dec) => + dec + .fromProtoObj(pubSubTopic, message as IProtoMessage) + .then((decoded) => decoded || Promise.reject("Decoding failed")) ); - if (!decoded) { - log("Not able to decode message"); - continue; - } - // This is just to prevent more decoding attempt - // TODO: Could be better if we were to abort promises - didDecodeMsg = Boolean(decoded); - await callback(decoded); + + const decodedMessage = await Promise.any(decodePromises); + + await callback(decodedMessage); + } catch (e) { + log("Error decoding message", e); } }