Estoy luchando para resolver el problema con la siguiente sintaxis:
export const sendVerificationEmail = async () => (dispatch) => { try { dispatch({ type: EMAIL_FETCHING, payload: true }); await Auth.sendEmailVerification(); dispatch({ type: EMAIL_FETCHING, payload: false })) } catch (error) { dispatch({ type: EMAIL_FETCHING, payload: false }); throw new Error(error); } };Sigo recibiendo un error que dice:
esperar es una palabra reservada
... pero ¿no es legal dentro de una función asíncrona?
El bit de envío proviene de la biblioteca react-thunk .
Para usar await , la función que lo encierra directamente debe ser asíncrona. De acuerdo con su comentario, agregar async a la función interna soluciona su problema, así que lo publicaré aquí:
export const sendVerificationEmail = async () => async (dispatch) => { try { dispatch({ type: EMAIL_FETCHING, payload: true }); await Auth.sendEmailVerification(); dispatch({ type: EMAIL_FETCHING, payload: false })) } catch (error) { dispatch({ type: EMAIL_FETCHING, payload: false }); throw new Error(error); } }; Posiblemente, podría eliminar el async de la función externa porque no contiene ninguna operación asíncrona, pero eso dependería de si la persona que llama a ese sendVerificationEmail espera que sendVerificationEmail devuelva una promesa o no.
Use await directamente dentro del alcance que está usando async y elimine el alcance superior async ya que es redundante.
La forma correcta de escribir esto:
const sendVerificationEmail = () => async (dispatch) => { await Auth.sendEmailVerification(); // some code.. }; Tuviste el error porque usaste la palabra clave await sin async directamente en el alcance con await , tenías 2 funciones allí, una dentro de la otra, tenías async en la parte superior pero no en la interna, donde importa.
Camino equivocado:
const sendVerificationEmail = async () => // notice that an async before the (dispatch) is missing (dispatch) => { await Auth.sendEmailVerification(); // some code.. };A partir de esto, se generará un error (el último error disponible de Chrome):
Uncaught SyntaxError: await is only valid in async functions and the top level bodies of modules
Async FunctionsUna función asíncrona es una función declarada con la palabra clave asíncrona y la palabra clave espera está permitida dentro de ella. Las palabras clave async y await permiten que el comportamiento asincrónico basado en promesas se escriba en un estilo más claro, lo que evita la necesidad de configurar explícitamente cadenas de promesas.