Await는 비동기 함수 내부의 예약어 오류입니다.


89

다음 구문으로 문제를 파악하는 데 어려움을 겪고 있습니다.

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);
    }
  };

다음과 같은 오류가 계속 발생합니다.

await는 예약어입니다.

...하지만 비동기 함수 내에서 합법적이지 않습니까?

디스패치 비트는 react-thunk 라이브러리에서 가져옵니다.


6
비동기 함수 안에 있지 않습니다. 로 시작하는 함수 내부에 있으며 (dispatch) => 비동기가 아닙니다. sendVerificationEmail어떤 작업을 수행하는 대신 다른 함수를 반환 하는 이유는 무엇 입니까?
JLRishe

3
@JLRishe 실제로 async (dispatch) =>답변으로 게시 할 수 있어야합니다. 파견에 액세스하려면 반환해야합니다
Ilja

답변:


148

를 사용하려면 await직접 둘러싸는 함수가 비동기 여야합니다. 귀하의 의견에 따르면 async내부 기능을 추가 하면 문제가 해결되므로 여기에 게시하겠습니다.

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);
    }
  };

아마, 당신은을 제거 할 수 async는 비동기 작업을 포함하지 않기 때문에 외부 함수에서,하지만 그 호출자가 있는지 여부에 따라 달라 sendVerificationEmail기대하고 sendVerificationEmail약속을 반환하거나하지.


8
실제로 외부 비동기가 필요하지 않습니다
Ilja

1
아! 감사합니다! :) 내가 foreach는 내부에 같은 문제가 있었다 ... 잔인한
닉 스틸

forEach와 비동기 함수에 포함 된 await를 사용하는 것도 마찬가지입니다.
Opus1217
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.