From 61cbea1fcc1df790e7e65b1300fc93bc91c0971d Mon Sep 17 00:00:00 2001 From: Bruno Lemos Date: Wed, 19 Dec 2018 18:47:35 -0200 Subject: [PATCH] Pause fetch retries for 5 minutes after an error occurs E.g. if a user type the wrong username, previously it was trying to refetch every 10 seconds --- .../src/redux/reducers/subscriptions.ts | 3 ++- .../src/redux/sagas/subscriptions.ts | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/packages/components/src/redux/reducers/subscriptions.ts b/packages/components/src/redux/reducers/subscriptions.ts index 1466d838..81cf4257 100644 --- a/packages/components/src/redux/reducers/subscriptions.ts +++ b/packages/components/src/redux/reducers/subscriptions.ts @@ -190,8 +190,9 @@ export const subscriptionsReducer: Reducer = ( if (!subscription) return subscription.data = subscription.data || {} - subscription.data.loadState = 'error' subscription.data.errorMessage = action.error && action.error.message + subscription.data.lastFetchedAt = new Date().toISOString() + subscription.data.loadState = 'error' // draft.updatedAt = new Date().toISOString() }) diff --git a/packages/components/src/redux/sagas/subscriptions.ts b/packages/components/src/redux/sagas/subscriptions.ts index c2a0ee56..6a3085b3 100644 --- a/packages/components/src/redux/sagas/subscriptions.ts +++ b/packages/components/src/redux/sagas/subscriptions.ts @@ -76,6 +76,26 @@ function* init() { subscriptionsToFetch.map(function*(subscription) { if (!subscription) return + const fiveMinutes = 1000 * 60 * 5 + const timeDiff = subscription.data.lastFetchedAt + ? Date.now() - new Date(subscription.data.lastFetchedAt).valueOf() + : undefined + + if ( + subscription && + subscription.data && + subscription.data.loadState === 'error' && + (!timeDiff || timeDiff < fiveMinutes) + ) { + if (__DEV__) { + // tslint:disable-next-line no-console + console.debug( + 'Ignoring subscription re-fetch due to recent fetch error.', + ) + } + return + } + return yield put( actions.fetchSubscriptionRequest({ subscriptionId: subscription.id,