mirror of
https://github.com/vector-im/element-web.git
synced 2024-11-17 22:14:58 +08:00
Merge pull request #1567 from matrix-org/luke/fix-flair-store
Fix multiple requests for publicised groups of given user
This commit is contained in:
commit
8800081cb9
@ -66,7 +66,7 @@ class FlairStore extends EventEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Bulk lookup ongoing, return promise to resolve/reject
|
// Bulk lookup ongoing, return promise to resolve/reject
|
||||||
if (this._usersPending[userId]) {
|
if (this._usersPending[userId] || this._usersInFlight[userId]) {
|
||||||
return this._usersPending[userId].prom;
|
return this._usersPending[userId].prom;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,7 +91,7 @@ class FlairStore extends EventEmitter {
|
|||||||
console.error('Could not get groups for user', this.props.userId, err);
|
console.error('Could not get groups for user', this.props.userId, err);
|
||||||
throw err;
|
throw err;
|
||||||
}).finally(() => {
|
}).finally(() => {
|
||||||
delete this._usersPending[userId];
|
delete this._usersInFlight[userId];
|
||||||
});
|
});
|
||||||
|
|
||||||
// This debounce will allow consecutive requests for the public groups of users that
|
// This debounce will allow consecutive requests for the public groups of users that
|
||||||
@ -113,27 +113,25 @@ class FlairStore extends EventEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async _batchedGetPublicGroups(matrixClient) {
|
async _batchedGetPublicGroups(matrixClient) {
|
||||||
// Take the userIds from the keys of this._usersPending
|
// Move users pending to users in flight
|
||||||
const usersInFlight = Object.keys(this._usersPending);
|
this._usersInFlight = this._usersPending;
|
||||||
|
this._usersPending = {};
|
||||||
|
|
||||||
let resp = {
|
let resp = {
|
||||||
users: [],
|
users: [],
|
||||||
};
|
};
|
||||||
try {
|
try {
|
||||||
resp = await matrixClient.getPublicisedGroups(usersInFlight);
|
resp = await matrixClient.getPublicisedGroups(Object.keys(this._usersInFlight));
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
// Propagate the same error to all usersInFlight
|
// Propagate the same error to all usersInFlight
|
||||||
usersInFlight.forEach((userId) => {
|
Object.keys(this._usersInFlight).forEach((userId) => {
|
||||||
this._usersPending[userId].reject(err);
|
this._usersInFlight[userId].reject(err);
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const updatedUserGroups = resp.users;
|
const updatedUserGroups = resp.users;
|
||||||
usersInFlight.forEach((userId) => {
|
Object.keys(this._usersInFlight).forEach((userId) => {
|
||||||
if (this._usersPending[userId]) {
|
this._usersInFlight[userId].resolve(updatedUserGroups[userId] || []);
|
||||||
this._usersPending[userId].resolve(updatedUserGroups[userId] || []);
|
|
||||||
} else {
|
|
||||||
console.error("Promise vanished for resolving groups for " + userId);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user