【问题标题】:Angular Rxjs repeatWhen: when all status are not COMPLETEDAngular Rxjs repeatWhen:当所有状态都未完成时
【发布时间】:2020-07-15 01:55:54
【问题描述】:

如果我没有收到相同的 URL,我想重试(最多 5 次点击相同的 URL,延迟 5 秒)相同的 URL Angular 服务文件中的所有状态都是“已完成”

[  
  {  
    "data": [   
      //SET OF OBJECTS  
    ],  
    "status": "COMPLETED"  
  },
  {  
    "data": [  
    //SET OF OBJECTS  
    ],  
    "status": "NO_DATA_FOUND"  
  }  
]```

【问题讨论】:

    标签: angular rxjs


    【解决方案1】:

    试试这个

    this.http.get().pipe(
      map(res => {
       res.array.forEach(el => {
        if (el.status !== "completed") {
          //error will be catched by retryWhen
          throw res;
        }     
       })
       return res;
      }),
      retry(5),
      retryWhen(errors => errors.pipe(delay(1000)))
    )
    

    【讨论】:

    • 这个会无限次重试,应该限制在5次以内
    • retryWhen(attempts => zip(range(1, maxTries), 尝试) .pipe( map(([i]) => i * i), mergeMap(i => timer(i * ms)) ) ) 我认为我们需要将其包含在 retryWhen blcok 中
    • 它的无限循环?
    【解决方案2】:

    不确定您的代码是什么样的,但我认为这种方法应该可行:

    src$.pipe(
      retryWhen(
        errSbj => errSbj.pipe(
          delay(/* ... */),
          take(5),
    
          // Until it receives a `COMPLETED` status
          takeUntil(statusCompleted$)
        )
      )
    )
    

    statusCompleted$发出时,整个流将complete

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 2020-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-14
      相关资源
      最近更新 更多