Как правильно обрабатывать поток создания пользователей firebase в приложенииact-redux? - PullRequest
0 голосов
/ 04 ноября 2018

Я уже некоторое время пишу свое приложение React / Rediux / Firebase (началось около 1 года назад, но у меня было несколько месяцев перерывов - поэтому я могу просмотреть свой собственный код с точки зрения времени). Теперь я снова проверяю код и у меня возникает ощущение, что это не современный уровень.

Я использую Firebase также для управления учетной записью, в данном случае для создания новой

Я поместил всю цепочку действий, связанных с созданием пользователя и обработкой ошибок, в один функциональный блок в Actions / index.js.

export const signUpUser = (data) => dispatch => {
  Firebase.auth().createUserAndRetrieveDataWithEmailAndPassword(data.email, data.password)
    .then(response => {
      const userId = Firebase.auth().currentUser()
      getUserInfoRef(userId).set({
        uid: userId,
        isAdmin: false
      })
    })
    .then(response => {
      Firebase.auth().currentUser().updateProfile({
        displayName: `${data.name} ${data.surname}`
      })
    })
    .then(() => {
      dispatch(sendEmailVerification())
    })
    .catch(error => {
      console.log('Error during signUpUser', error)
      dispatch(authError(error))
    })
}

но это хороший подход? Разве диспетчеризация действий с его тела не является своего рода анти-паттерном? Может быть надо как-то разбить (как?)?

Это работает, но я не в восторге от того, как это выглядит :) Пожалуйста, сообщите.

1 Ответ

0 голосов
/ 04 ноября 2018

Я не вижу ничего плохого в вашем коде. Пока вы используете обещание с блоками then, catch, оно должно быть отправлено внутри. Но если вы все еще хотите, чтобы он выглядел лучше, я предлагаю вам использовать async/await так:

export const signUpUser = (data) => async dispatch => {
  try {
    await Firebase.auth().createUserAndRetrieveDataWithEmailAndPassword(data.email, data.password)

    const userId = await Firebase.auth().currentUser()

    getUserInfoRef(userId).set({
      uid: userId,
      isAdmin: false
    }) // am not sure if this func is async or not

    await Firebase.auth().currentUser().updateProfile({
      displayName: `${data.name} ${data.surname}`
    })

    dispatch(sendEmailVerification())
  } catch(e) {
    console.log('Error during signUpUser', error)
    dispatch(authError(error))
  }
}

PS: Приятно видеть, что ТАК просят людей быть "милыми" здесь. Я думаю, что это очень нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...