From 82ea907e8f2e4d0bfe9fcd4aec92ba48b299b25c Mon Sep 17 00:00:00 2001 From: Paul Frazee Date: Wed, 8 Feb 2023 10:52:47 -0600 Subject: [PATCH] Fix potential issues with promise guards when an error occurs (#170) --- src/state/models/feed-view.ts | 41 ++++++++++++++--------- src/state/models/notifications-view.ts | 24 +++++++------ src/state/models/reposted-by-view.ts | 7 ++-- src/state/models/suggested-actors-view.ts | 7 ++-- src/state/models/user-followers-view.ts | 7 ++-- src/state/models/user-follows-view.ts | 7 ++-- src/state/models/votes-view.ts | 7 ++-- 7 files changed, 64 insertions(+), 36 deletions(-) diff --git a/src/state/models/feed-view.ts b/src/state/models/feed-view.ts index e56c6a0989..2477e13503 100644 --- a/src/state/models/feed-view.ts +++ b/src/state/models/feed-view.ts @@ -187,10 +187,11 @@ export class FeedModel { hasMore = true loadMoreCursor: string | undefined pollCursor: string | undefined - _loadPromise: Promise | undefined - _loadMorePromise: Promise | undefined - _loadLatestPromise: Promise | undefined - _updatePromise: Promise | undefined + + private _loadPromise: Promise | undefined + private _loadMorePromise: Promise | undefined + private _loadLatestPromise: Promise | undefined + private _updatePromise: Promise | undefined // data feed: FeedItemModel[] = [] @@ -206,10 +207,6 @@ export class FeedModel { rootStore: false, params: false, loadMoreCursor: false, - _loadPromise: false, - _loadMorePromise: false, - _loadLatestPromise: false, - _updatePromise: false, }, {autoBind: true}, ) @@ -284,8 +281,11 @@ export class FeedModel { await this._pendingWork() this.setHasNewLatest(false) this._loadPromise = this._initialLoad(isRefreshing) - await this._loadPromise - this._loadPromise = undefined + try { + await this._loadPromise + } finally { + this._loadPromise = undefined + } } /** @@ -312,8 +312,11 @@ export class FeedModel { } await this._pendingWork() this._loadMorePromise = this._loadMore() - await this._loadMorePromise - this._loadMorePromise = undefined + try { + await this._loadMorePromise + } finally { + this._loadMorePromise = undefined + } } /** @@ -326,8 +329,11 @@ export class FeedModel { await this._pendingWork() this.setHasNewLatest(false) this._loadLatestPromise = this._loadLatest() - await this._loadLatestPromise - this._loadLatestPromise = undefined + try { + await this._loadLatestPromise + } finally { + this._loadLatestPromise = undefined + } } /** @@ -339,8 +345,11 @@ export class FeedModel { } await this._pendingWork() this._updatePromise = this._update() - await this._updatePromise - this._updatePromise = undefined + try { + await this._updatePromise + } finally { + this._updatePromise = undefined + } } /** diff --git a/src/state/models/notifications-view.ts b/src/state/models/notifications-view.ts index 17fc71aeed..91b5c83c67 100644 --- a/src/state/models/notifications-view.ts +++ b/src/state/models/notifications-view.ts @@ -190,9 +190,10 @@ export class NotificationsViewModel { params: ListNotifications.QueryParams hasMore = true loadMoreCursor?: string - _loadPromise: Promise | undefined - _loadMorePromise: Promise | undefined - _updatePromise: Promise | undefined + + private _loadPromise: Promise | undefined + private _loadMorePromise: Promise | undefined + private _updatePromise: Promise | undefined // data notifications: NotificationsViewItemModel[] = [] @@ -210,9 +211,6 @@ export class NotificationsViewModel { rootStore: false, params: false, mostRecentNotification: false, - _loadPromise: false, - _loadMorePromise: false, - _updatePromise: false, }, {autoBind: true}, ) @@ -282,8 +280,11 @@ export class NotificationsViewModel { } await this._pendingWork() this._loadMorePromise = this._loadMore() - await this._loadMorePromise - this._loadMorePromise = undefined + try { + await this._loadMorePromise + } finally { + this._loadMorePromise = undefined + } } /** @@ -295,8 +296,11 @@ export class NotificationsViewModel { } await this._pendingWork() this._updatePromise = this._update() - await this._updatePromise - this._updatePromise = undefined + try { + await this._updatePromise + } finally { + this._updatePromise = undefined + } } /** diff --git a/src/state/models/reposted-by-view.ts b/src/state/models/reposted-by-view.ts index fddb6dfc85..9e92a3132a 100644 --- a/src/state/models/reposted-by-view.ts +++ b/src/state/models/reposted-by-view.ts @@ -64,8 +64,11 @@ export class RepostedByViewModel { return this._loadMorePromise } this._loadMorePromise = this._load(isRefreshing) - await this._loadMorePromise - this._loadMorePromise = undefined + try { + await this._loadMorePromise + } finally { + this._loadMorePromise = undefined + } } // state transitions diff --git a/src/state/models/suggested-actors-view.ts b/src/state/models/suggested-actors-view.ts index 085efff84d..12b70c1910 100644 --- a/src/state/models/suggested-actors-view.ts +++ b/src/state/models/suggested-actors-view.ts @@ -54,8 +54,11 @@ export class SuggestedActorsViewModel { return this._loadMorePromise } this._loadMorePromise = this._load(isRefreshing) - await this._loadMorePromise - this._loadMorePromise = undefined + try { + await this._loadMorePromise + } finally { + this._loadMorePromise = undefined + } } // state transitions diff --git a/src/state/models/user-followers-view.ts b/src/state/models/user-followers-view.ts index b23cc23d5a..46b9c15282 100644 --- a/src/state/models/user-followers-view.ts +++ b/src/state/models/user-followers-view.ts @@ -68,8 +68,11 @@ export class UserFollowersViewModel { return this._loadMorePromise } this._loadMorePromise = this._load(isRefreshing) - await this._loadMorePromise - this._loadMorePromise = undefined + try { + await this._loadMorePromise + } finally { + this._loadMorePromise = undefined + } } // state transitions diff --git a/src/state/models/user-follows-view.ts b/src/state/models/user-follows-view.ts index 4986d33450..6562deae82 100644 --- a/src/state/models/user-follows-view.ts +++ b/src/state/models/user-follows-view.ts @@ -68,8 +68,11 @@ export class UserFollowsViewModel { return this._loadMorePromise } this._loadMorePromise = this._load(isRefreshing) - await this._loadMorePromise - this._loadMorePromise = undefined + try { + await this._loadMorePromise + } finally { + this._loadMorePromise = undefined + } } // state transitions diff --git a/src/state/models/votes-view.ts b/src/state/models/votes-view.ts index 3e9c3396bb..e38324504b 100644 --- a/src/state/models/votes-view.ts +++ b/src/state/models/votes-view.ts @@ -61,8 +61,11 @@ export class VotesViewModel { return this._loadMorePromise } this._loadMorePromise = this._load(isRefreshing) - await this._loadMorePromise - this._loadMorePromise = undefined + try { + await this._loadMorePromise + } finally { + this._loadMorePromise = undefined + } } // state transitions