From f977c808ecc94595cd1715666daa3379f3b39cbc Mon Sep 17 00:00:00 2001
From: Patrick Jentsch <p.jentsch@uni-bielefeld.de>
Date: Wed, 1 Dec 2021 17:52:09 +0100
Subject: [PATCH] Even better solution for concurrent promise handling

---
 app/static/js/nopaque/App.js | 16 +++++-----------
 1 file changed, 5 insertions(+), 11 deletions(-)

diff --git a/app/static/js/nopaque/App.js b/app/static/js/nopaque/App.js
index d6c72255..6e5477a8 100644
--- a/app/static/js/nopaque/App.js
+++ b/app/static/js/nopaque/App.js
@@ -2,6 +2,7 @@ class App {
   constructor() {
     this.data = {users: {}};
     this.eventListeners = {'users.patch': []};
+    this.promises = {users: {}};
     this.socket = io({transports: ['websocket'], upgrade: false});
     this.socket.on('users.patch', patch => this.usersPatchHandler(patch));
   }
@@ -51,16 +52,10 @@ class App {
   }
 
   getUserById(userId) {
-    let promise;
-
-    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);});
-      }
+    if (userId in this.promises.users) {
+      return this.promises.users[userId];
     }
-    promise = new Promise((resolve, reject) => {
+    this.promises.users[userId] = new Promise((resolve, reject) => {
       this.socket.emit('users.user.get', userId, response => {
         if (response.code === 200) {
           this.data.users[userId] = response.payload;
@@ -70,8 +65,7 @@ class App {
         }
       });
     });
-    this.data.users[userId] = promise;
-    return promise;
+    return this.promises.users[userId];
   }
 
   usersPatchHandler(patch) {
-- 
GitLab