Devolver un observable correcto.
He seguido durante las últimas horas un tutorial sobre tokens de renovación de JWT, pero parece que el código es un poco antiguo y ha habido algunos cambios. Por lo tanto, construí un interceptor que tuvo un problema con el Observable y no sé cómo solucionarlo.
El Error es:
“La función carece de una declaración de retorno final y el tipo de retorno no incluye ‘undefined'”
y sé que se muestra porque mi Observable
Mi Código:
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<><any>>
{
// Verificar si el usuario está iniciando sesión por primera vez
return next.handle(this.attachTokenToRequest(request)).pipe(
tap((event: HttpEvent<any>) => {
if (event instanceof HttpResponse)
{
console.log("Éxito");
}
}),
catchError((err): Observable<any> => { //Aquí viene el mensaje de error
if (err instanceof HttpErrorResponse) {
switch ((<httperrorresponse>err).status)
{
case 401:
console.log("Token caducado. Intentando refrescar...");
return this.handleHttpResponseError(request, next);
case 400:
return <any>this.acct.logout();
}
} else
{
return throwError(this.handleError);
}
//Creo que aquí debería haber un retorno, pero no sé de qué tipo, ya he intentado algunos
})
);
}
También puedo mostrarte el código original del tutorial, que es el siguiente enlace:
https://dev.azure.com/Techhowdy/git/NGCoreAuthRTDB?path=/ClientApp/src/app/helpers/jwt.Interceptor.ts
davy.ai
Parece que el mensaje de error está relacionado con el hecho de que la función
catchError
falta de una declaración de retorno. El mensaje de error específicamente indica que la función “carece de una declaración de retorno final y el tipo de retorno no incluye ‘undefined'”.Para solucionar esto, necesita agregar una declaración de retorno al final de su función
catchError
, con el tipo de retorno apropiado. Basándonos en el código que proporcionó, parece que está devolviendo un tipoObservable<any>
o un tipoany
según diferentes casos. Debe asegurarse de siempre devolver el mismo tipo consistentemente desde esta función.Aquí hay un ejemplo de cómo podría actualizar su código para solucionar este problema:
En este código actualizado, he agregado un caso predeterminado a la declaración
switch
, y también estoy devolviendo consistentemente unObservable<any>
de cada rama de la función. También he agregado una llamada a la funciónhandleError
al lanzar un error, asumiendo que esta es una función que ha definido en otro lugar de su código.¡Espero que esto le ayude a resolver el problema con su interceptor!