Angular 有没有一种方法可以通过使用rxjs操作符重试来获取HTTP状态代码? getRequest(url:string,retryCount=2){ 返回新的可观察(响应=>{ 返回此.http.get(url) .烟斗( retryWhen((错误)=>{ 返回错误.pipe( concatMap((e,i)=>{ 如果(i>=retryCount){ 回击投手({…e,retryCount}); } 归还(e).管道(延迟(2000年)); }) ); }) ) .订阅(数据=>{ 下一步(数据); },(错误:HttpErrorResponse)=>{ response.next()//预期为404、500等 }); }); } 获取请求(https://jsonplaceholder.typicode.com/postss).订阅((数据:任意)=>{ 控制台日志(数据); });

Angular 有没有一种方法可以通过使用rxjs操作符重试来获取HTTP状态代码? getRequest(url:string,retryCount=2){ 返回新的可观察(响应=>{ 返回此.http.get(url) .烟斗( retryWhen((错误)=>{ 返回错误.pipe( concatMap((e,i)=>{ 如果(i>=retryCount){ 回击投手({…e,retryCount}); } 归还(e).管道(延迟(2000年)); }) ); }) ) .订阅(数据=>{ 下一步(数据); },(错误:HttpErrorResponse)=>{ response.next()//预期为404、500等 }); }); } 获取请求(https://jsonplaceholder.typicode.com/postss).订阅((数据:任意)=>{ 控制台日志(数据); });,angular,http,rxjs,observable,Angular,Http,Rxjs,Observable,上述代码必须在出现错误时返回错误代码。上述url不存在,必须在两次重试时获取404。获取这些错误代码需要进行哪些更改?您可以在retryWhen中检索状态代码,如下所示: getRequest(url:string,retryCount=2){ 返回此.http.get(url).pipe( retryWhen(errors=>errors.pipe( mergeMap((错误,i)=>i{},//成功 error=>console.log(error.status) ); 在上面的代码中,在

上述代码必须在出现错误时返回错误代码。上述url不存在,必须在两次重试时获取404。获取这些错误代码需要进行哪些更改?

您可以在retryWhen中检索状态代码,如下所示:

getRequest(url:string,retryCount=2){
返回此.http.get(url).pipe(
retryWhen(errors=>errors.pipe(
mergeMap((错误,i)=>i{},//成功
error=>console.log(error.status)
);
在上面的代码中,在
retryWhen
操作符中,我们捕获错误并以2秒的延迟重试请求2次,就像您所做的那样

然后,我们抛出错误,并在subscribe调用的error函数中处理它

我们可以通过从传入错误中检索
status
属性来获取状态


我希望我回答了您的问题:)

您可以在Retry中检索状态代码,当操作员如下所示:

getRequest(url:string,retryCount=2){
返回此.http.get(url).pipe(
retryWhen(errors=>errors.pipe(
mergeMap((错误,i)=>i{},//成功
error=>console.log(error.status)
);
在上面的代码中,在
retryWhen
操作符中,我们捕获错误并以2秒的延迟重试请求2次,就像您所做的那样

然后,我们抛出错误,并在subscribe调用的error函数中处理它

我们可以通过从传入错误中检索
status
属性来获取状态


我希望我回答了您的问题:)

您是否尝试过用
err.status//expected…
替换
response.next()//预期404、500等
?当您打印err时,您得到了什么?您是否尝试过替换
response.next()//预期404,500等等
err.status//expected…
?当您打印err时,您得到的是什么?
getRequest(url : string,retryCount = 2) {
    return new Observable(response => {
     return this.http.get<any>(url)
     .pipe(
        retryWhen((error) => {
          return error.pipe(
            concatMap((e, i) => {
              if (i >= retryCount) {
                return throwError({ ...e, retryCount });
              }
              return of(e).pipe(delay(2000));
            })
          );
        })
      )
      .subscribe(data => {
        response.next(data);
        }, (err: HttpErrorResponse) => {
              response.next() //expected 404 ,500 and so on
          });
      });
  }

getRequest(https://jsonplaceholder.typicode.com/postss).subscribe((data: any) => {
      console.log(data);
      });