Even better solution for concurrent promise handling

This commit is contained in:
Patrick Jentsch 2021-12-01 17:52:09 +01:00
parent ff514368c3
commit f977c808ec

View File

@ -2,6 +2,7 @@ class App {
constructor() { constructor() {
this.data = {users: {}}; this.data = {users: {}};
this.eventListeners = {'users.patch': []}; this.eventListeners = {'users.patch': []};
this.promises = {users: {}};
this.socket = io({transports: ['websocket'], upgrade: false}); this.socket = io({transports: ['websocket'], upgrade: false});
this.socket.on('users.patch', patch => this.usersPatchHandler(patch)); this.socket.on('users.patch', patch => this.usersPatchHandler(patch));
} }
@ -51,16 +52,10 @@ class App {
} }
getUserById(userId) { getUserById(userId) {
let promise; if (userId in this.promises.users) {
return this.promises.users[userId];
if (userId in this.data.users) {
if (this.data.users[userId] instanceof Promise) {
return this.data.users[userId];
} else {
return new Promise((resolve, reject) => {resolve(userValue);});
}
} }
promise = new Promise((resolve, reject) => { this.promises.users[userId] = new Promise((resolve, reject) => {
this.socket.emit('users.user.get', userId, response => { this.socket.emit('users.user.get', userId, response => {
if (response.code === 200) { if (response.code === 200) {
this.data.users[userId] = response.payload; this.data.users[userId] = response.payload;
@ -70,8 +65,7 @@ class App {
} }
}); });
}); });
this.data.users[userId] = promise; return this.promises.users[userId];
return promise;
} }
usersPatchHandler(patch) { usersPatchHandler(patch) {