Change FrontendApiSender.callbacks to be a map
This commit is contained in:
parent
a2175f2c29
commit
362e317a5d
@ -22,7 +22,7 @@ class FrontendApiSender {
|
||||
this.senderId = FrontendApiSender.generateId(16);
|
||||
this.ackTimeout = 3000; // 3 seconds
|
||||
this.responseTimeout = 10000; // 10 seconds
|
||||
this.callbacks = {};
|
||||
this.callbacks = new Map();
|
||||
this.disconnected = false;
|
||||
this.nextId = 0;
|
||||
|
||||
@ -43,7 +43,7 @@ class FrontendApiSender {
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
const info = {id, resolve, reject, ack: false, timer: null};
|
||||
this.callbacks[id] = info;
|
||||
this.callbacks.set(id, info);
|
||||
info.timer = setTimeout(() => this.onError(id, 'Timeout (ack)'), this.ackTimeout);
|
||||
|
||||
this.port.postMessage({id, action, params, target, senderId: this.senderId});
|
||||
@ -71,19 +71,18 @@ class FrontendApiSender {
|
||||
onDisconnect() {
|
||||
this.disconnected = true;
|
||||
|
||||
const ids = Object.keys(this.callbacks);
|
||||
for (const id of ids) {
|
||||
for (const id of this.callbacks.keys()) {
|
||||
this.onError(id, 'Disconnected');
|
||||
}
|
||||
}
|
||||
|
||||
onAck(id) {
|
||||
if (!hasOwn(this.callbacks, id)) {
|
||||
const info = this.callbacks.get(id);
|
||||
if (typeof info === 'undefined') {
|
||||
console.warn(`ID ${id} not found for ack`);
|
||||
return;
|
||||
}
|
||||
|
||||
const info = this.callbacks[id];
|
||||
if (info.ack) {
|
||||
console.warn(`Request ${id} already ack'd`);
|
||||
return;
|
||||
@ -95,18 +94,18 @@ class FrontendApiSender {
|
||||
}
|
||||
|
||||
onResult(id, data) {
|
||||
if (!hasOwn(this.callbacks, id)) {
|
||||
const info = this.callbacks.get(id);
|
||||
if (typeof info === 'undefined') {
|
||||
console.warn(`ID ${id} not found`);
|
||||
return;
|
||||
}
|
||||
|
||||
const info = this.callbacks[id];
|
||||
if (!info.ack) {
|
||||
console.warn(`Request ${id} not ack'd`);
|
||||
return;
|
||||
}
|
||||
|
||||
delete this.callbacks[id];
|
||||
this.callbacks.delete(id);
|
||||
clearTimeout(info.timer);
|
||||
info.timer = null;
|
||||
|
||||
@ -118,9 +117,9 @@ class FrontendApiSender {
|
||||
}
|
||||
|
||||
onError(id, reason) {
|
||||
if (!hasOwn(this.callbacks, id)) { return; }
|
||||
const info = this.callbacks[id];
|
||||
delete this.callbacks[id];
|
||||
const info = this.callbacks.get(id);
|
||||
if (typeof info === 'undefined') { return; }
|
||||
this.callbacks.delete(id);
|
||||
info.timer = null;
|
||||
info.reject(new Error(reason));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user