我如何从拦截器向调用者函数抛出错误

时间:2019-02-09 16:38:44

标签: angular rxjs reactive-programming ngrx

在driver.ts文件中,我像这样

拨打了http电话
this.http.get(GetDrivers + '?service_identifier=' + 'road_logistic' + '&page=' + '1').subscribe((response:any) => {
      console.log("gio");
    }, err =>{
      console.log(err);
    });

我还有所有HTTP调用的拦截器。在这里。

 return observablePromise.pipe(mergeMap(user_tokens => {
            let access_token = user_tokens ? user_tokens.access_token : null;
            let clonedReq = this.addToken(request, access_token);

            return next.handle(clonedReq).pipe(
                tap( 
                    evt =>{
                        if (evt instanceof HttpResponse) {
                            console.log("nice");
                            this.loaderService.storeLoaderOff();
                        }
                    },
                    error =>{
                      throwError("my error");
                    }
              )})

所以问题是,我手动将驱动程序http调用作为错误。它涉及拦截器中的Tap错误处理程序,(我知道,因为console.log出现了),但是throwError不起作用。它应该做的是“我的错误”必须扔给调用方(driver.ts http调用)。正如您在驱动程序http调用中看到的那样,我捕获了错误并将其记录在控制台中。我该怎么办?

2 个答案:

答案 0 :(得分:0)

尝试更改您的拦截器,使其使用 catchError 并生成您的自定义错误:

return observablePromise.pipe(mergeMap(user_tokens => {
    let access_token = user_tokens ? user_tokens.access_token : null;
    let clonedReq = this.addToken(request, access_token);

    return next.handle(clonedReq).pipe(
        tap( 
            evt =>{
                if (evt instanceof HttpResponse) {
                    console.log("nice");
                    this.loaderService.storeLoaderOff();
                }
            }
        ),
       catchError(error =>{          // <--- this part
              throwError("my error");
       })
    })

希望有帮助。

答案 1 :(得分:0)

您不应该在水龙头内做错误的事情。 应该看起来像这样:

return next.handle(request).pipe(
    tap(() => console.log('tap')),
    catchError((error: HttpErrorResponse) => {
      return throwError('my error');
    }
);