fix(Sharding): properly handle errors in fetchClientValues (#6990)

This commit is contained in:
SpaceEEC
2021-11-16 18:40:45 +01:00
committed by GitHub
parent fdb09cbe03
commit c0ba2d46d0
2 changed files with 10 additions and 5 deletions

View File

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

View File

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