Merge pull request #130 from shocknet/faster-retry

Faster retry
This commit is contained in:
CapDog 2020-08-03 21:25:12 -04:00 committed by GitHub
commit 7782f59f82

View file

@ -70,6 +70,29 @@ const timeout5 = promise => {
]) ])
} }
/**
* @template T
* @param {Promise<T>} promise
* @returns {Promise<T>}
*/
const timeout2 = promise => {
/** @type {NodeJS.Timeout} */
// @ts-ignore
let timeoutID
return Promise.race([
promise.then(v => {
clearTimeout(timeoutID)
return v
}),
new Promise((_, rej) => {
timeoutID = setTimeout(() => {
rej(new Error(Constants.ErrorCode.TIMEOUT_ERR))
}, 2000)
})
])
}
/** /**
* @template T * @template T
* @param {(gun: GUNNode, user: UserGUNNode) => Promise<T>} promGen The function * @param {(gun: GUNNode, user: UserGUNNode) => Promise<T>} promGen The function
@ -88,7 +111,7 @@ const tryAndWait = async (promGen, shouldRetry = () => false) => {
let resolvedValue let resolvedValue
try { try {
resolvedValue = await timeout10( resolvedValue = await timeout2(
promGen( promGen(
require('../../Mediator/index').getGun(), require('../../Mediator/index').getGun(),
require('../../Mediator/index').getUser() require('../../Mediator/index').getUser()
@ -116,6 +139,36 @@ const tryAndWait = async (promGen, shouldRetry = () => false) => {
` args: ${promGen.toString()} -- ${shouldRetry.toString()}` ` args: ${promGen.toString()} -- ${shouldRetry.toString()}`
) )
await delay(200)
try {
resolvedValue = await timeout5(
promGen(
require('../../Mediator/index').getGun(),
require('../../Mediator/index').getUser()
)
)
if (shouldRetry(resolvedValue)) {
logger.info(
'force retrying' +
` args: ${promGen.toString()} -- ${shouldRetry.toString()} \n resolvedValue: ${resolvedValue}, type: ${typeof resolvedValue}`
)
} else {
return resolvedValue
}
} catch (e) {
logger.error(e)
if (e.message === 'NOT_AUTH') {
throw e
}
}
logger.info(
`\n retrying \n` +
` args: ${promGen.toString()} -- ${shouldRetry.toString()}`
)
await delay(3000) await delay(3000)
try { try {
@ -300,5 +353,6 @@ module.exports = {
mySecret, mySecret,
promisifyGunNode: require('./promisifygun'), promisifyGunNode: require('./promisifygun'),
timeout5, timeout5,
timeout2,
isNodeOnline isNodeOnline
} }