From 3616a07dbb951bd51f2190041ebdfdedd0d01e90 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 6 Aug 2018 17:16:13 +0200 Subject: [PATCH] store /members promise on room while loading members --- src/models/room.js | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/models/room.js b/src/models/room.js index ffcce4e60..7d6449fd1 100644 --- a/src/models/room.js +++ b/src/models/room.js @@ -175,6 +175,8 @@ function Room(roomId, myUserId, opts) { this._blacklistUnverifiedDevices = null; this._syncedMembership = null; this._summaryHeroes = null; + // awaited by getEncryptionTargetMembers while room mebers are loading + this._oobMembersPromise = null; } utils.inherits(Room, EventEmitter); @@ -283,19 +285,21 @@ Room.prototype.needsOutOfBandMembers = function() { * Loads the out-of-band members from the promise passed in * @param {Promise} eventsPromise promise that resolves to an array with membership MatrixEvents for the members */ -Room.prototype.loadOutOfBandMembers = async function(eventsPromise) { +Room.prototype.loadOutOfBandMembers = function(eventsPromise) { if (!this.needsOutOfBandMembers()) { - return; + return Promise.resolve(); } this.currentState.markOutOfBandMembersStarted(); - let events = null; - try { - events = await eventsPromise; - } catch (err) { + + // store the promise that already updated the room state + // to ensure that happens first + this._oobMembersPromise = eventsPromise.then((events) => { + this.currentState.setOutOfBandMembers(events); + }, (err) => { this.currentState.markOutOfBandMembersFailed(); throw err; //rethrow so calling code is aware operation failed - } - this.currentState.setOutOfBandMembers(events); + }); + return this._oobMembersPromise; }; /**