웹사이트 검색

javascript - Firebase auth().signInWithEmailAndPassword를 try-catch async-await로 사용할 때 처리되지 않은 오류


Firebase 인증을 위한 로그인 폼 작업 중입니다.

제가 async await:로 할 때:

async function doLogin(email,password) {
    setLoading(true);
    try {
      const userCredential = await firebase.auth().signInWithEmailAndPassword(email, password);
      console.log(userCredential);
    }
    catch(err) {
      console.log(err);
    }
  }

위 코드에서 로그인 오류가 발생하면 두 개의 중복된 오류 메시지가 기록되며, 그 중 하나는 uncaught입니다. 그리고 uncaught 오류는 auth.esm.js:67에서 발생합니다.

내가 .then().catch()로 하면

async function doLogin(email,password) {
  setLoading(true);
  firebase.auth().signInWithEmailAndPassword(email, password)
  .then((user) => console.log(user))
  .catch((err) => console.log(err));
}

저는 오류 메시지를 딱 하나만 받습니다. 제 코드에서 나오는 것으로, 의도된 동작입니다.

질문

제가 async await 버전에서 뭔가 잘못하고 있는 건가요? 똑같이 작동해야 하지 않나요? 왜 Firebase가 잡히지 않은 오류를 던지는 거죠?

답변 #1

저는 Firebase 팀에 연락했으며, 그들의 답변은 다음과 같았습니다:

완전한 재현 가능한 코드를 제공해 주셔서 감사합니다, cbdeveloper. 문제를 재현할 수 있었고, 이것이 저희 측에서 이미 알려진 문제임을 확인했습니다. GitHub 리포지토리에서 보고된 이슈 #1881에 따르면, 현재로서는 선택지가 두 가지뿐이며, 추가 콘솔 오류를 받아들이거나 인증 메서드에서 async/await를 사용하지 않는 것입니다. 이는 SDK를 크게 재작성하지 않고서는 할 수 없습니다. Firebase 엔지니어 중 한 명이 제공한 자세한 설명은 여기에서 확인할 수 있습니다. 현재로서는 이 문제가 언제 수정될지에 대한 세부 사항이나 일정은 아직 확인되지 않았습니다. 때때로 릴리스 노트를 확인하거나 업데이트를 위해 토론에 참여할 수 있습니다.