[RxJS] Retry with increasing time

复制代码
import { Observable, throwError, timer } from 'rxjs';
import { mergeMap, finalize } from 'rxjs/operators';

export const genericRetryStrategy = ({
  maxRetryAttempts = 3,
  scalingDuration = 1000,
  excludedStatusCodes = [],
}: {
  maxRetryAttempts?: number;
  scalingDuration?: number;
  excludedStatusCodes?: number[];
} = {}) => (attempts: Observable<any>) => {
  return attempts.pipe(
    mergeMap((error, i) => {
      const retryAttempt = i + 1;
      // if maximum number of retries have been met
      // or response is a status code we don't wish to retry, throw error
      if (retryAttempt > maxRetryAttempts || excludedStatusCodes.find((e) => e === error.status)) {
        return throwError(error);
      }
      console.log(`Attempt ${retryAttempt}: retrying in ${retryAttempt * scalingDuration}ms`);
      // retry after 1s, 2s, etc...
      return timer(retryAttempt * scalingDuration);
    }),
    finalize(() => console.log('We are done!'))
  );
};
复制代码

USAGE:

复制代码
    const careTeams$: Observable<any[]> = getMockData([]).pipe(
      map((results) => {
        if (result.length == 0) {
          throw results;
        }
        return results;
      }),
      retryWhen(
        genericRetryStrategy({
          maxRetryAttempts: 10,
          scalingDuration: 100,
          excludedStatusCodes: [500],
        })
      ),
      catchError((err) => of([]))
    );
复制代码

 

posted @   Zhentiw  阅读(70)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2020-08-12 [PostgresSQL] Install and start the service
2020-08-12 [Node.js] Serve a random static file with Express
2020-08-12 [React] Display Computed Data Using Recoil Selectors in React
2020-08-12 [Javascript] 4 ways to remove duplicates elements from an array with Javascript
2020-08-12 [ML] Cost Function
2017-08-12 [Angular] Component architecture and Reactive Forms
2016-08-12 [Practical Git] Remove unnecessary git tracking with .gitignore files
点击右上角即可分享
微信分享提示