как выкинуть ошибку от перехватчика в функцию звонящего - PullRequest
0 голосов
/ 09 февраля 2019

в файле 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-вызов драйвера вручную как ошибка.это касается обработчика ошибок в перехватчике (я знаю, потому что обнаруживается console.log), но throwError не работает.то, что он должен сделать, это "моя ошибка" должна быть брошена вызывающей стороне (вызов http.tster.ts).как вы видите в драйвере HTTP-вызова, я ловлю ошибки и консоль журнала их.что мне делать?

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Вы не должны делать ошибку внутри крана.Должно выглядеть так:

return next.handle(request).pipe(
    tap(() => console.log('tap')),
    catchError((error: HttpErrorResponse) => {
      return throwError('my error');
    }
);    
0 голосов
/ 09 февраля 2019

Попробуйте изменить ваш перехватчик, чтобы он использовал 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");
       })
    })

Надеюсь, это поможет.

...