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版本