allow passing a function to shard eval (#2193)

This commit is contained in:
Gus Caplan
2018-01-12 07:05:27 -06:00
committed by Crawl
parent 2249da464f
commit 8aafcd6cde
2 changed files with 5 additions and 3 deletions

View File

@@ -175,8 +175,8 @@ class Shard extends EventEmitter {
}
/**
* Evaluates a script on the shard, in the context of the {@link Client}.
* @param {string} script JavaScript to run on the shard
* Evaluates a script or function on the shard, in the context of the {@link Client}.
* @param {string|Function} script JavaScript to run on the shard
* @returns {Promise<*>} Result of the script execution
*/
eval(script) {
@@ -191,7 +191,8 @@ class Shard extends EventEmitter {
};
this.process.on('message', listener);
this.send({ _eval: script }).catch(err => {
const _eval = typeof script === 'function' ? `(${script})(this)` : script;
this.send({ _eval }).catch(err => {
this.process.removeListener('message', listener);
this._evals.delete(script);
reject(err);

View File

@@ -86,6 +86,7 @@ class ShardClientUtil {
*/
broadcastEval(script) {
return new Promise((resolve, reject) => {
script = typeof script !== 'function' ? `(${script})(this)` : script;
const listener = message => {
if (!message || message._sEval !== script) return;
process.removeListener('message', listener);