diff --git a/src/stores/FlairStore.js b/src/stores/FlairStore.js index 4ef29ae4e1..f8f76dd9af 100644 --- a/src/stores/FlairStore.js +++ b/src/stores/FlairStore.js @@ -154,16 +154,26 @@ class FlairStore extends EventEmitter { return this._groupProfiles[groupId]; } - // No request yet, start one - if (!this._groupProfilesPromise[groupId]) { - this._groupProfilesPromise[groupId] = matrixClient.getGroupProfile(groupId); + // A request is ongoing, wait for it to complete and return the group profile. + if (this._groupProfilesPromise[groupId]) { + try { + await this._groupProfilesPromise[groupId]; + } catch (e) { + // Don't log the error; this is done below + return undefined; + } + return this._groupProfiles[groupId]; } + // No request yet, start one + console.log('FlairStore: Request group profile of ' + groupId); + this._groupProfilesPromise[groupId] = matrixClient.getGroupProfile(groupId).delay(5000); + let profile; try { profile = await this._groupProfilesPromise[groupId]; } catch (e) { - console.log('Failed to get group profile for ' + groupId, e); + console.log('FlairStore: Failed to get group profile for ' + groupId, e); // Don't retry, but allow a retry when the profile is next requested delete this._groupProfilesPromise[groupId]; return; @@ -179,6 +189,7 @@ class FlairStore extends EventEmitter { /// XXX: This is verging on recreating a third "Flux"-looking Store. We really /// should replace FlairStore with a Flux store and some async actions. + console.log('FlairStore: Emit updateGroupProfile for ' + groupId); this.emit('updateGroupProfile'); setTimeout(() => {