From b73edb902944800f75d2e2a5e4f435b79bfbb0af Mon Sep 17 00:00:00 2001 From: Derrick Hammer Date: Sun, 23 Jul 2023 13:54:42 -0400 Subject: [PATCH] refactor: improve logic of ready promise --- src/index.ts | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/index.ts b/src/index.ts index e00a0fb..b20a5f9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -17,9 +17,25 @@ export default class RPC extends ProtomuxRPC { ...options, }; super(stream, options); - this._ready = new Promise((resolve) => { - // @ts-ignore - this.on("open", resolve); + + this._ready = new Promise((resolve, reject) => { + stream.on("open", onopen); + stream.on("destroy", ondestroy); + + function onopen(handshake) { + removeListener(); + resolve(handshake); + } + + function ondestroy() { + removeListener(); + reject(new Error("Client could not connect")); + } + + function removeListener() { + stream.off("open", onopen); + stream.off("destroy", ondestroy); + } }); }