commit
7782f59f82
1 changed files with 55 additions and 1 deletions
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue