Return existing promise instead of failing, mark 2

This commit is contained in:
Schuyler Cebulskie
2016-09-24 02:29:15 -04:00
parent f1bfd55233
commit 13e2b923e8

View File

@@ -40,8 +40,8 @@ class Shard {
if (this.manager.respawn) this.manager.createShard(this.id); if (this.manager.respawn) this.manager.createShard(this.id);
}); });
this._evals = new Set(); this._evals = new Map();
this._fetches = new Set(); this._fetches = new Map();
} }
/** /**
@@ -64,10 +64,9 @@ class Shard {
* @returns {Promise<*>} Result of the script execution * @returns {Promise<*>} Result of the script execution
*/ */
eval(script) { eval(script) {
if (this._evals.has(script)) return Promise.reject(new Error('Already running an eval for the script.')); if (this._evals.has(script)) return this._evals.get(script);
this._evals.add(script);
return new Promise((resolve, reject) => { const promise = new Promise((resolve, reject) => {
const listener = message => { const listener = message => {
if (!message) return; if (!message) return;
if (message._evalResult) { if (message._evalResult) {
@@ -92,6 +91,9 @@ class Shard {
reject(err); reject(err);
}); });
}); });
this._evals.set(script, promise);
return promise;
} }
/** /**
@@ -104,10 +106,9 @@ class Shard {
* }).catch(console.error); * }).catch(console.error);
*/ */
fetchClientValue(prop) { fetchClientValue(prop) {
if (this._fetches.has(prop)) return Promise.reject(new Error(`Already running a fetch for ${prop}.`)); if (this._fetches.has(prop)) return this._fetches.get(prop);
this._fetches.add(prop);
return new Promise((resolve, reject) => { const promise = new Promise((resolve, reject) => {
const listener = message => { const listener = message => {
if (typeof message !== 'object' || message._fetchProp !== prop) return; if (typeof message !== 'object' || message._fetchProp !== prop) return;
this.process.removeListener('message', listener); this.process.removeListener('message', listener);
@@ -122,6 +123,9 @@ class Shard {
reject(err); reject(err);
}); });
}); });
this._fetches.set(prop, promise);
return promise;
} }
} }