javascript RXJS - 使用rxjs.js实现指数退避
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript RXJS - 使用rxjs.js实现指数退避相关的知识,希望对你有一定的参考价值。
import { delay, dematerialize, map, materialize, retryWhen, switchMap } from 'rxjs/operators'
import { concat, pipe, range, throwError, timer, zip, Observable } from 'rxjs'
function backOff (maxTries, ms) {
return pipe(
retryWhen(attempts => {
const observableForRetries =
zip(range(1, maxTries), attempts)
.pipe(
map(([elemFromRange, elemFromAttempts]) => elemFromRange),
map(i => {
return i * i
}),
switchMap(i => timer(i * ms))
)
const observableForFailure =
throwError(new Error('Could not complete the request'))
.pipe(
materialize(),
delay(1000),
dematerialize()
)
return concat(observableForRetries, observableForFailure)
})
)
}
const getW3Observer = new Observable((subscriber) => {
const w3 = getters.getWeb3()
if (w3) {
subscriber.next(w3)
subscriber.complete()
} else {
subscriber.error(w3)
}
}).pipe(backOff(3, 1000))
getW3Observer
.subscribe(w3 => {
// result where
})
}
以上是关于javascript RXJS - 使用rxjs.js实现指数退避的主要内容,如果未能解决你的问题,请参考以下文章
javascript 使用RxJS执行同步传感器
javascript RxJS转换流使用
javascript 使用BehaviorSubject的同步RxJS不正确
Rxjs 操作符
javascript 使用RxJS的同步传感器执行错误
javascript RxJS版本