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)设置了不同的重试时间。

这个解决方

相关内容

热门资讯

记者揭秘!智星菠萝辅助(透视辅... 记者揭秘!智星菠萝辅助(透视辅助)拱趴大菠萝辅助神器,扑克教程(有挂细节);模式供您选择,了解更新找...
一分钟揭秘!约局吧能能开挂(透... 一分钟揭秘!约局吧能能开挂(透视辅助)hhpoker辅助靠谱,2024新版教程(有挂教学);约局吧能...
透视辅助!wepoker模拟器... 透视辅助!wepoker模拟器哪个好用(脚本)hhpoker辅助挂是真的,科技教程(有挂技巧);囊括...
透视代打!hhpkoer辅助器... 透视代打!hhpkoer辅助器视频(辅助挂)pokemmo脚本辅助,2024新版教程(有挂教程);风...
透视了解!约局吧德州真的有透视... 透视了解!约局吧德州真的有透视挂(透视脚本)德州局HHpoker透视脚本,必胜教程(有挂分析);亲,...
六分钟了解!wepoker挂底... 六分钟了解!wepoker挂底牌(透视)德普之星开辅助,详细教程(有挂解密);德普之星开辅助是一种具...
9分钟了解!wpk私人辅助(透... 9分钟了解!wpk私人辅助(透视)hhpoker德州透视,插件教程(有挂教学);风靡全球的特色经典游...
推荐一款!wepoker究竟有... 推荐一款!wepoker究竟有透视(脚本)哈糖大菠萝开挂,介绍教程(有挂技术);囊括全国各种wepo...
每日必备!wepoker有人用... 每日必备!wepoker有人用过(脚本)wpk有那种辅助,线上教程(有挂规律);wepoker有人用...
玩家必备教程!wejoker私... 玩家必备教程!wejoker私人辅助软件(脚本)哈糖大菠萝可以开挂,可靠技巧(有挂神器)申哈糖大菠萝...