optional force retrying

This commit is contained in:
Daniel Lugo 2020-02-24 18:24:42 -04:00
parent fcc1de962e
commit 7ef3a9cb7f

View file

@ -59,21 +59,32 @@ const timeout5 = promise => {
* @template T * @template T
* @param {(gun: GUNNode, user: UserGUNNode) => Promise<T>} promGen The function * @param {(gun: GUNNode, user: UserGUNNode) => Promise<T>} promGen The function
* receives the most recent gun and user instances. * receives the most recent gun and user instances.
* @param {((resolvedValue: unknown) => boolean)=} shouldRetry
* @returns {Promise<T>} * @returns {Promise<T>}
*/ */
const tryAndWait = async promGen => { const tryAndWait = async (promGen, shouldRetry = () => false) => {
/* eslint-disable no-empty */ /* eslint-disable no-empty */
/* eslint-disable init-declarations */
// If hang stop at 10, wait 3, retry, if hang stop at 5, reinstate, warm for // If hang stop at 10, wait 3, retry, if hang stop at 5, reinstate, warm for
// 5, retry, stop at 10, err // 5, retry, stop at 10, err
/** @type {T} */
let resolvedValue
try { try {
return await timeout10( resolvedValue = await timeout10(
promGen( promGen(
require('../../Mediator/index').getGun(), require('../../Mediator/index').getGun(),
require('../../Mediator/index').getUser() require('../../Mediator/index').getUser()
) )
) )
if (shouldRetry(resolvedValue)) {
throw new Error('force retrying')
}
return resolvedValue
} catch (e) { } catch (e) {
logger.error(e) logger.error(e)
} }
@ -83,12 +94,18 @@ const tryAndWait = async promGen => {
await delay(3000) await delay(3000)
try { try {
return await timeout5( resolvedValue = await timeout5(
promGen( promGen(
require('../../Mediator/index').getGun(), require('../../Mediator/index').getGun(),
require('../../Mediator/index').getUser() require('../../Mediator/index').getUser()
) )
) )
if (shouldRetry(resolvedValue)) {
throw new Error('force retrying')
}
return resolvedValue
} catch (e) { } catch (e) {
logger.error(e) logger.error(e)
} }
@ -104,6 +121,7 @@ const tryAndWait = async promGen => {
) )
) )
/* eslint-enable no-empty */ /* eslint-enable no-empty */
/* eslint-enable init-declarations */
} }
/** /**