Próbuję rozwiązać problem z następującą składnią:
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);
}
};
Ciągle otrzymuję błąd mówiąc:
await to słowo zastrzeżone
... ale czy nie jest to legalne w ramach funkcji asynchronicznej?
Bit wysyłki pochodzi z biblioteki React-thunk .
(dispatch) =>
, i nie jest asynchroniczna. DlaczegosendVerificationEmail
zamiast wykonywać jakąś akcję, zwracasz inną funkcję?async (dispatch) =>
abyś mógł opublikować, że jako odpowiedź muszę to zwrócić, aby uzyskać dostęp do wysyłkiOdpowiedzi:
Aby można było użyć
await
, funkcja bezpośrednio ją otaczająca musi być asynchroniczna. Zgodnie z twoim komentarzem dodanieasync
do funkcji wewnętrznej rozwiązuje problem, więc opublikuję to tutaj: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); } };
Możliwe, że można by usunąć
async
funkcję zewnętrzną, ponieważ nie zawiera ona żadnych operacji asynchronicznych, ale to zależy od tego, czy wywołującysendVerificationEmail
oczekujesendVerificationEmail
zwrotu obietnicy, czy nie.źródło