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) });