diff --git a/src/settings/handlers/AccountSettingsHandler.ts b/src/settings/handlers/AccountSettingsHandler.ts index d1a2c6c622..f7a5fe9ca5 100644 --- a/src/settings/handlers/AccountSettingsHandler.ts +++ b/src/settings/handlers/AccountSettingsHandler.ts @@ -165,8 +165,8 @@ export default class AccountSettingsHandler extends MatrixClientBackedSettingsHa content[field] = value; - await this.client.setAccountData(eventType, content); - + // Attach a deferred *before* setting the account data to ensure we catch any requests + // which race between different lines. const deferred = defer(); const handler = (event: MatrixEvent) => { if (event.getType() !== eventType || event.getContent()[field] !== value) return; @@ -175,6 +175,8 @@ export default class AccountSettingsHandler extends MatrixClientBackedSettingsHa }; this.client.on(ClientEvent.AccountData, handler); + await this.client.setAccountData(eventType, content); + await deferred.promise; }