From c0ba2d46d0796c95598673f77f04b180280afb57 Mon Sep 17 00:00:00 2001 From: SpaceEEC Date: Tue, 16 Nov 2021 18:40:45 +0100 Subject: [PATCH] fix(Sharding): properly handle errors in fetchClientValues (#6990) --- src/sharding/Shard.js | 3 ++- src/sharding/ShardClientUtil.js | 12 ++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/sharding/Shard.js b/src/sharding/Shard.js index 02d0128ef43b..297ef9ec69a7 100644 --- a/src/sharding/Shard.js +++ b/src/sharding/Shard.js @@ -247,7 +247,8 @@ class Shard extends EventEmitter { if (message?._fetchProp !== prop) return; child.removeListener('message', listener); this._fetches.delete(prop); - resolve(message._result); + if (!message._error) resolve(message._result); + else reject(Util.makeError(message._error)); }; child.on('message', listener); diff --git a/src/sharding/ShardClientUtil.js b/src/sharding/ShardClientUtil.js index d69e65bdac32..cfa312038ff5 100644 --- a/src/sharding/ShardClientUtil.js +++ b/src/sharding/ShardClientUtil.js @@ -175,10 +175,14 @@ class ShardClientUtil { async _handleMessage(message) { if (!message) return; if (message._fetchProp) { - const props = message._fetchProp.split('.'); - let value = this.client; - for (const prop of props) value = value[prop]; - this._respond('fetchProp', { _fetchProp: message._fetchProp, _result: value }); + try { + const props = message._fetchProp.split('.'); + let value = this.client; + for (const prop of props) value = value[prop]; + this._respond('fetchProp', { _fetchProp: message._fetchProp, _result: value }); + } catch (err) { + this._respond('fetchProp', { _fetchProp: message._fetchProp, _error: Util.makePlainError(err) }); + } } else if (message._eval) { try { this._respond('eval', { _eval: message._eval, _result: await this.client._eval(message._eval) });