this.$auth.loginWith devuelve una promesa, pero no estoy seguro si debo envolverlo en un intento/atrapar o simplemente usar una catch en la promesa.
¿Cuál es la forma correcta?
Trata de atraparlo:
async login() { try { const response = await this.$auth.loginWith('laravelSanctum', { data: { email: 'xxx', password: 'xxx', }, }); this.$auth.setUser(response.data.data); } catch (e) { } },Captura:
async login() { const response = await this.$auth.loginWith('laravelSanctum', { data: { email: 'xxx', password: 'xxx', }, }).catch(function(e) { }); this.$auth.setUser(response.data.data); },En general, es una buena práctica no combinar async / await con el uso de los métodos de promesa ( .then , .catch ), por lo que su try / catch generalmente sería la mejor de esas dos opciones.
Y @VLAZ señaló una de las buenas razones para eso: cuando mezcla metáforas como esa, puede ser complicado leer el flujo, y en su caso, la versión que usa .catch en realidad causará un error porque su catch específica el controlador convierte el rechazo en cumplimiento con undefined , por lo que el código continúa después de await e intenta hacer this.$auth.setUser(response.data.data); cuando la response no está undefined , lo que provoca un nuevo error que parece no estar relacionado con el inicio de sesión.
Pero normalmente, incluso mejor es no manejar el rechazo en absoluto para que la persona que llama sepa si el inicio de sesión funcionó o no (porque el inicio de login se rechazará si hubo un error). Pero para los puntos de entrada en su código (controladores de eventos, ese tipo de cosas), el manejo en línea de los rechazos puede tener un lugar. Depende de cómo se utilice el inicio de login . Aparte de los puntos de entrada, el valor predeterminado es dejar que el error/rechazo se propague a la persona que llama.