1
+ import { observer as globalObserver } from 'binary-common-utils/lib/observer'
1
2
import { getUTCTime } from 'binary-common-utils/lib/tools'
3
+ import { translate } from '../../common/i18n'
2
4
3
5
export const noop = ( ) => { }
4
6
@@ -55,9 +57,17 @@ export const registerStream = (observer, name, cb) => {
55
57
56
58
const maxRetries = 10
57
59
58
- export const getBackoffDelay = ( errorCode , delayIndex ) => {
60
+ const notifyRetry = ( msg , error , delay ) => globalObserver . emit ( 'Notify' , [
61
+ `${ msg } : ${ error . error . msg_type } , ${ translate ( 'retrying in' ) } ${ delay } s` ,
62
+ 'error' ,
63
+ 'right' ,
64
+ ] )
65
+
66
+ const getBackoffDelay = ( error , delayIndex ) => {
59
67
const offset = 0.5 // 500ms
60
68
69
+ const errorCode = error && error . name
70
+
61
71
if ( errorCode === 'DisconnectError' ) {
62
72
return offset * 1000
63
73
}
@@ -66,12 +76,14 @@ export const getBackoffDelay = (errorCode, delayIndex) => {
66
76
const exponentialIncrease = ( 2 ** delayIndex ) + offset
67
77
68
78
if ( errorCode === 'RateLimit' || delayIndex < maxExpTries ) {
79
+ notifyRetry ( translate ( 'Rate limit reached for' ) , error , exponentialIncrease )
69
80
return exponentialIncrease * 1000
70
81
}
71
82
72
- const linearIncrease = ( maxExpTries - delayIndex ) + 1
83
+ const linearIncrease = exponentialIncrease + ( ( maxExpTries - delayIndex ) + 1 )
73
84
74
- return ( exponentialIncrease + linearIncrease ) * 1000
85
+ notifyRetry ( translate ( 'Request failed for' ) , error , linearIncrease )
86
+ return linearIncrease * 1000
75
87
}
76
88
77
89
export const shouldThrowError = ( e , types = [ ] , delayIndex = 0 ) => e &&
@@ -93,7 +105,7 @@ export const recoverFromError = (f, r, types, delayIndex) => new Promise((resolv
93
105
}
94
106
95
107
r ( e . name , ( ) => new Promise ( delayPromise =>
96
- setTimeout ( delayPromise , getBackoffDelay ( e && e . name , delayIndex ) ) ) )
108
+ setTimeout ( delayPromise , getBackoffDelay ( e , delayIndex ) ) ) )
97
109
} )
98
110
} )
99
111
0 commit comments