diff --git a/src/matrix/room/timeline/Timeline.js b/src/matrix/room/timeline/Timeline.js index eab71255..ecba1f2a 100644 --- a/src/matrix/room/timeline/Timeline.js +++ b/src/matrix/room/timeline/Timeline.js @@ -32,7 +32,8 @@ export class Timeline { this._disposables = new Disposables(); this._pendingEvents = pendingEvents; this._clock = clock; - this._remoteEntries = null; + // constructing this early avoid some problem while sync and openTimeline race + this._remoteEntries = new SortedArray((a, b) => a.compare(b)); this._ownMember = null; this._timelineReader = new TimelineReader({ roomId: this._roomId, @@ -96,7 +97,6 @@ export class Timeline { } _setupEntries(timelineEntries) { - this._remoteEntries = new SortedArray((a, b) => a.compare(b)); this._remoteEntries.setManySorted(timelineEntries); if (this._pendingEvents) { this._localEntries = new MappedList(this._pendingEvents, pe => { @@ -159,7 +159,9 @@ export class Timeline { // Once the subscription is setup, MappedList will set up the local // relations as needed with _applyAndEmitLocalRelationChange, // so we're not missing anything by bailing out. - if (!this._localEntries.hasSubscriptions) { + // + // _localEntries can also not yet exist + if (!this._localEntries?.hasSubscriptions) { return; } // find any local relations to this new remote event @@ -301,4 +303,4 @@ export function tests() { assert.equal(Array.from(timeline.entries)[0].isRedacting, true); } } -} \ No newline at end of file +}