У меня есть действие, которое в настоящее время работает нормально, используя .then
, но когда я пытаюсь преобразовать его в async ... await
, оно внезапно не может получить доступ к первому параметру функции. Второй параметр по-прежнему работает нормально, хотя.
Текущая функция, которая отлично работает:
export const signInUser = (email, password) => {
return (dispatch) => {
return firebase
.auth()
.signInWithEmailAndPassword(email, password)
.then(() => {
console.log('signed in')
const { uid, email } = firebase.auth().currentUser
dispatch({ type: 'SIGN_IN', uid, email })
return dispatch(fetchAllData())
})
.catch(error => {
throw (error)
})
}
};
Новая функция, которая не работает, потому что 'email' не определена.
export const signInUser = (email, password) => {
return async (dispatch) => {
console.log('testing')
console.log(password)
console.log('testing', email, password)
await firebase.auth().signInWithEmailAndPassword(email, password)
console.log('signed in')
const { uid, email } = firebase.auth().currentUser
dispatch({ type: 'SIGN_IN', uid, email })
return dispatch(fetchAllData())
}
};
Первый консольный журнал console.log('testing')
отлично работает и выводит строку 'testing'. Второй консольный журнал console.log(password)
также работает нормально и печатает введенный пароль. Но третий консольный журнал console.log('testing', email, password)
вообще не отображается.
Так называется функция:
Родительский компонент передает его дочернему компоненту: submit={(email, password) => dispatch(signInUser(email, password))}
Дочерний компонент вызывает его:
const submitForm = (event) => {
event.preventDefault();
if (validForm) {
setLoading(true)
submit(email, password)
.catch(err => {
setLoading(false)
console.log('catch:', err.code)
setError(err.code)
})
}
}
Вывод, который я получаю: catch: undefined
.
Кроме того, если я изменю функцию на эту:
export const signInUser = (email, password) => {
const userEmail = email
return async (dispatch) => {
console.log('testing')
console.log(password)
console.log('testing', userEmail, password)
await firebase.auth().signInWithEmailAndPassword(userEmail, password)
console.log('signed in')
const { uid, email } = firebase.auth().currentUser
dispatch({ type: 'SIGN_IN', uid, email })
return dispatch(fetchAllData())
}
};
Тогда все работает нормально. Но я не знаю, почему мне нужно изменить это так?
Спасибо