Fix potential issues with promise guards when an error occurs (#170)

This commit is contained in:
Paul Frazee
2023-02-08 10:52:47 -06:00
committed by GitHub
parent 51d0ea4750
commit 82ea907e8f
7 changed files with 64 additions and 36 deletions
+17 -8
View File
@@ -187,10 +187,11 @@ export class FeedModel {
hasMore = true hasMore = true
loadMoreCursor: string | undefined loadMoreCursor: string | undefined
pollCursor: string | undefined pollCursor: string | undefined
_loadPromise: Promise<void> | undefined
_loadMorePromise: Promise<void> | undefined private _loadPromise: Promise<void> | undefined
_loadLatestPromise: Promise<void> | undefined private _loadMorePromise: Promise<void> | undefined
_updatePromise: Promise<void> | undefined private _loadLatestPromise: Promise<void> | undefined
private _updatePromise: Promise<void> | undefined
// data // data
feed: FeedItemModel[] = [] feed: FeedItemModel[] = []
@@ -206,10 +207,6 @@ export class FeedModel {
rootStore: false, rootStore: false,
params: false, params: false,
loadMoreCursor: false, loadMoreCursor: false,
_loadPromise: false,
_loadMorePromise: false,
_loadLatestPromise: false,
_updatePromise: false,
}, },
{autoBind: true}, {autoBind: true},
) )
@@ -284,9 +281,12 @@ export class FeedModel {
await this._pendingWork() await this._pendingWork()
this.setHasNewLatest(false) this.setHasNewLatest(false)
this._loadPromise = this._initialLoad(isRefreshing) this._loadPromise = this._initialLoad(isRefreshing)
try {
await this._loadPromise await this._loadPromise
} finally {
this._loadPromise = undefined this._loadPromise = undefined
} }
}
/** /**
* Register any event listeners. Returns a cleanup function. * Register any event listeners. Returns a cleanup function.
@@ -312,9 +312,12 @@ export class FeedModel {
} }
await this._pendingWork() await this._pendingWork()
this._loadMorePromise = this._loadMore() this._loadMorePromise = this._loadMore()
try {
await this._loadMorePromise await this._loadMorePromise
} finally {
this._loadMorePromise = undefined this._loadMorePromise = undefined
} }
}
/** /**
* Load more posts to the start of the feed * Load more posts to the start of the feed
@@ -326,9 +329,12 @@ export class FeedModel {
await this._pendingWork() await this._pendingWork()
this.setHasNewLatest(false) this.setHasNewLatest(false)
this._loadLatestPromise = this._loadLatest() this._loadLatestPromise = this._loadLatest()
try {
await this._loadLatestPromise await this._loadLatestPromise
} finally {
this._loadLatestPromise = undefined this._loadLatestPromise = undefined
} }
}
/** /**
* Update content in-place * Update content in-place
@@ -339,9 +345,12 @@ export class FeedModel {
} }
await this._pendingWork() await this._pendingWork()
this._updatePromise = this._update() this._updatePromise = this._update()
try {
await this._updatePromise await this._updatePromise
} finally {
this._updatePromise = undefined this._updatePromise = undefined
} }
}
/** /**
* Check if new posts are available * Check if new posts are available
+10 -6
View File
@@ -190,9 +190,10 @@ export class NotificationsViewModel {
params: ListNotifications.QueryParams params: ListNotifications.QueryParams
hasMore = true hasMore = true
loadMoreCursor?: string loadMoreCursor?: string
_loadPromise: Promise<void> | undefined
_loadMorePromise: Promise<void> | undefined private _loadPromise: Promise<void> | undefined
_updatePromise: Promise<void> | undefined private _loadMorePromise: Promise<void> | undefined
private _updatePromise: Promise<void> | undefined
// data // data
notifications: NotificationsViewItemModel[] = [] notifications: NotificationsViewItemModel[] = []
@@ -210,9 +211,6 @@ export class NotificationsViewModel {
rootStore: false, rootStore: false,
params: false, params: false,
mostRecentNotification: false, mostRecentNotification: false,
_loadPromise: false,
_loadMorePromise: false,
_updatePromise: false,
}, },
{autoBind: true}, {autoBind: true},
) )
@@ -282,9 +280,12 @@ export class NotificationsViewModel {
} }
await this._pendingWork() await this._pendingWork()
this._loadMorePromise = this._loadMore() this._loadMorePromise = this._loadMore()
try {
await this._loadMorePromise await this._loadMorePromise
} finally {
this._loadMorePromise = undefined this._loadMorePromise = undefined
} }
}
/** /**
* Update content in-place * Update content in-place
@@ -295,9 +296,12 @@ export class NotificationsViewModel {
} }
await this._pendingWork() await this._pendingWork()
this._updatePromise = this._update() this._updatePromise = this._update()
try {
await this._updatePromise await this._updatePromise
} finally {
this._updatePromise = undefined this._updatePromise = undefined
} }
}
/** /**
* Update read/unread state * Update read/unread state
+3
View File
@@ -64,9 +64,12 @@ export class RepostedByViewModel {
return this._loadMorePromise return this._loadMorePromise
} }
this._loadMorePromise = this._load(isRefreshing) this._loadMorePromise = this._load(isRefreshing)
try {
await this._loadMorePromise await this._loadMorePromise
} finally {
this._loadMorePromise = undefined this._loadMorePromise = undefined
} }
}
// state transitions // state transitions
// = // =
@@ -54,9 +54,12 @@ export class SuggestedActorsViewModel {
return this._loadMorePromise return this._loadMorePromise
} }
this._loadMorePromise = this._load(isRefreshing) this._loadMorePromise = this._load(isRefreshing)
try {
await this._loadMorePromise await this._loadMorePromise
} finally {
this._loadMorePromise = undefined this._loadMorePromise = undefined
} }
}
// state transitions // state transitions
// = // =
+3
View File
@@ -68,9 +68,12 @@ export class UserFollowersViewModel {
return this._loadMorePromise return this._loadMorePromise
} }
this._loadMorePromise = this._load(isRefreshing) this._loadMorePromise = this._load(isRefreshing)
try {
await this._loadMorePromise await this._loadMorePromise
} finally {
this._loadMorePromise = undefined this._loadMorePromise = undefined
} }
}
// state transitions // state transitions
// = // =
+3
View File
@@ -68,9 +68,12 @@ export class UserFollowsViewModel {
return this._loadMorePromise return this._loadMorePromise
} }
this._loadMorePromise = this._load(isRefreshing) this._loadMorePromise = this._load(isRefreshing)
try {
await this._loadMorePromise await this._loadMorePromise
} finally {
this._loadMorePromise = undefined this._loadMorePromise = undefined
} }
}
// state transitions // state transitions
// = // =
+3
View File
@@ -61,9 +61,12 @@ export class VotesViewModel {
return this._loadMorePromise return this._loadMorePromise
} }
this._loadMorePromise = this._load(isRefreshing) this._loadMorePromise = this._load(isRefreshing)
try {
await this._loadMorePromise await this._loadMorePromise
} finally {
this._loadMorePromise = undefined this._loadMorePromise = undefined
} }
}
// state transitions // state transitions
// = // =