Я недавно начал использовать FireBase. Я создаю простое приложение, содержащее проверку подлинности пароля электронной почты. Когда пользователь отправляет форму, есть две возможности.

  • Если есть какая-либо ошибка, то форма покажет, что ошибка останется видимой.
  • Если ошибки нет, форма скрывает и удаляет ошибку.

Загрузчик должен быть скрыт после обработки в любом случае. Соответствующая часть кода есть.

let error = false; auth .createUserWithEmailAndPassword(email, password) .catch(err ={amp}gt; { if (err) error = true; RegisterForm.setError(err.message); }) .then(x ={amp}gt; { if (!error) { RegisterFormDialog.close(); } }) .finally(() ={amp}gt; { MainLoader.hide(); }); 

Приведенный выше код работает совершенно нормально, но проблема в том, что я должен создать дополнительную переменную error внешней области видимости, а затем проверить его внутри then() . Есть ли обратный вызов, который будет работать только при отсутствии ошибок. Потому что then() вызывается даже при наличии ошибок.

Обычная практика для всех методов, которые возвращают обещание (не только Firebase), заключается в том, чтобы ставить их перед catch обработки результатов:

 let error = false; auth .createUserWithEmailAndPassword(email, password) .then(x ={amp}gt; { RegisterFormDialog.close(); }) .catch(err ={amp}gt; { if (err) error = true; RegisterForm.setError(err.message); }) .finally(() ={amp}gt; { MainLoader.hide(); }); 

Если обещание разрешается успешно, будет вызван обратный вызов. В противном случае обратный вызов catch будет вызван. Но никогда не оба.