如果使用 RJXS 运算符从 http.get Angular 收到空结果,则重试查询

jua*_*rio 2 http rxjs typescript angular

我在 Angular 服务中有一个查询,有时我收到一个空数组,我想在这种情况下强制再次执行查询

let request = this.http.post(this.searchlUrl, payload).pipe(
          retryWhen(errors => errors.pipe(delay(1000), take(2), concat(throwError("Error Data")))), 
          map( res => {
            // If receive res['hotels'] == [] I want to force error
            return res; 
          })
        ).subscribe(res => {
            // Do Something when everything is ok
        }, err => {
            // Do Something on error
        });
      });
Run Code Online (Sandbox Code Playgroud)

如果出现错误,我正在使用 retryWhen 发出新请求(我等待 1 秒)。我的方法是在接收空时强制错误,以便激活 RetryWhen 但我不知道该怎么做,也不知道在接收空时强制重新协商的最佳做法是什么。

mar*_*tin 5

主要问题是操作符的顺序。retryWhen仅对error通知做出反应,因此您需要在之前抛出错误retryWhen

this.http.post(this.searchlUrl, payload).pipe(
  map(response => {
    if (something) {
      throw new Error(); // Will be caught by `map` and reemitted as an error notification.
    }
    return response;
  }),
  retryWhen(errors => errors.pipe(take(2), delay(1000))),
).subscribe(...);
Run Code Online (Sandbox Code Playgroud)

现场演示:https : //stackblitz.com/edit/rxjs-cmh1wd