AngularNGRXEffect:Retryifconditionismet
创始人
2024-10-28 18:00:32
0

我们可以使用RxJS的retryWhen操作符在ngrx effect中实现根据条件进行重试。

首先在我们的effect中定义一个Observable,当满足条件时该Observable会返回true。在调用http请求之前,我们可以使用RxJS的takeWhile操作符过滤掉Observable中不满足条件的值。如果takeWhile返回false,我们会在retryWhen中尝试重试 effect。

下面是实现过程的代码示例:

import { Injectable } from '@angular/core';
import { Actions, createEffect, ofType } from '@ngrx/effects';
import { catchError, map, mergeMap, retryWhen, takeWhile } from 'rxjs/operators';
import { of, timer } from 'rxjs';
 
@Injectable()
export class MyEffect {
 
  loadMyData$ = createEffect(() =>
    this.actions$.pipe(
      ofType('[MyComponent] Load My Data'),
      mergeMap(() =>
        this.myService.getData().pipe(
          takeWhile(result => !result.finished), // condition for retrying
          map(response => ({ type: '[MyComponent] Load My Data Success', payload: response })),
          catchError(error => of({ type: '[MyComponent] Load My Data Failure', error }))
        )
      ),
      retryWhen(errors =>
        errors.pipe(
          mergeMap(error => {
            if (error.status === 404) { // If error status is 404, retry after 5 seconds
              return timer(5000);
            } else if (error.status === 500) { // If error status is 500, retry after 10 seconds
              return timer(10000);
            } else {
              return of(error); // Throw the error
            }
          })
        )
      )
    )
  );
 
  constructor(
    private actions$: Actions,
    private myService: MyService
  ) {}
}

在此示例中,我们定义了一个条件为“! result.finished”的takeWhile操作符,以确保在满足此条件之前不会重试 effect。在retryWhen操作符中,我们为两种HTTP错误状态码(404和500)设置了不同的重试时间。

这个解决方

相关内容

热门资讯

开挂辅助工具"wep... 开挂辅助工具"wepoker钻石怎么看底牌"开挂(透视)辅助安装(发现有挂)《详细加薇1367043...
辅助开挂!小程序边锋辅助,we... 辅助开挂!小程序边锋辅助,wejoker辅助器要钱玩吗(透视)开挂辅助工具(有挂方略);是一款可以让...
开挂辅助神器"aap... 较多好评“微乐万能挂官网”开挂(透视)辅助教程 了解更多开挂安装加(136704302)微信号是一款...
开挂辅助!天天炫斗辅助工具,h... 开挂辅助!天天炫斗辅助工具,hhpoker到底可以辅助吗(透视)开挂辅助脚本(有挂方法);AI辅助机...
开挂辅助安装"wep... 开挂辅助安装"wepoker到底有没有透视"开挂(透视)辅助平台(有挂攻略);打开点击测试直接进入微...
开挂辅助!顺兴茶楼开挂,wep... 开挂辅助!顺兴茶楼开挂,wepokerplus万能挂(透视)开挂辅助下载(有挂辅助);1、超多福利:...
开挂辅助神器"hhp... 开挂辅助神器"hhpoker真的假的"开挂(透视)辅助下载(有挂技巧) 了解更多开挂安装加(1367...
开挂辅助!微信小程序游戏辅助,... 开挂辅助!微信小程序游戏辅助,wepoker辅助器安装包(透视)开挂辅助下载(有挂规律);1.微信小...
开挂辅助下载"pok... 您好:这款pokemmo脚本辅助游戏是可以开挂的,确实是有挂的,很多玩家在这款pokemmo脚本辅助...
开挂辅助!边锋干瞪眼ios辅助... 开挂辅助!边锋干瞪眼ios辅助,德州透视是真的假的(透视)开挂辅助神器(有挂教学);1、不需要AI权...