Wie zu propagieren und Fehler durch catchError() richtig?

Ich schrieb eine Funktion, die pipe-Lage:

HandleHttpBasicError<T>()
{
    return ((source:Observable<T>) => {
        return source.pipe(
            catchError((err:any) => {
                let msg = '';
                if(err && err instanceof HttpErrorResponse)
                {
                    if(err.status == 0)
                        msg += "The server didn't respond";
                }
                throw {
                    err,
                    msg
                } as CustomError
            })
        )

    })
}

Kann ich diese Funktion verwenden, auf diese Weise in meine HttpService:

checkExist(id:string)
{
    return this.http.head<void>(environment.apiUrl + 'some_url/' + id)
        .pipe(
            HandleHttpBasicError(),
            catchError((err:CustomError) => {
                if(err.msg)
                    throw err.msg;
                if(err.err.status == HttpStatusCodes.NOT_FOUND)
                    throw("It doesn't exist.");
                throw(err);
            })

        )
}

Ist es großartig. Wenn ich abonnieren checkExist(), bekomme ich ein gutes Fehlermeldung, weil HandleHttpBasicError ersten Fänge ein Fehler auf und wirft es der service catchError(), die throwes die Fehlermeldung, da war es nicht null.

Diese Weise erlaubt es mir, einen globalen catchError() mit Fehlermeldungen wird immer der gleiche sein. In Zukunft werde ich es tun, in eine HttpHandler, aber das ist nicht der Punkt hier.

Ist es ok, um die Kette der Fehler mit der throw keyword?

Ich versuchte wieder Observable.throwError(), aber der browser sagte

Beobachten.throwError ist nicht eine Funktion

Meine Importe sind import {Observable, of, throwError} from 'rxjs';.

Ist es nicht besser, dies zu tun:

return ((source:Observable<T>) => {
        return source.pipe(
            catchError((err:any) => {
                msg = '';
                ...
                return of({err, msg} as CustomError)
                /* instead of
                throw(err)
                -or-
                return Observable.throwError(err) (which doesn't work)
                */
            })
        )

    })

?

InformationsquelleAutor dc-p8 | 2018-05-11
Schreibe einen Kommentar