#javascript #reactjs #redux #try-catch
#javascript #reactjs #redux #попробуйте-catch
Вопрос:
итак, у меня есть это
try {
const user = await logUserInToApplication({ email, password })
console.log(user, 'usr')
await AsyncStorage.setItem('secureUid', user.user.uid)
await dispatch(getCurrentUser(user.user.uid))
setLoaded(true)
} catch (e) {
console.log(e, 'e')
setPassword('')
setError(e.message)
setLoaded(true)
}
но проблема в 2 вещах. во user.user.uid
-первых, это некрасиво, но, во-вторых, основная проблема заключается в том, что console.log(e)
выход из cannot read uid of defined
системы имеет смысл, но я хочу, чтобы это была ошибка, logUserIntoApplication
если это не удастся
так что я мог бы изменить его на это
try {
await logUserInToApplication({ email, password })
}
но тогда мне нужно получить значение, которое оно возвращает мне, чтобы я мог передать uid в другие функции, как мне это сделать?
Комментарии:
1. const {user} = ожидает logUserInToApplication({ email, password }); Попробуйте уничтожить. Это приведет к некоторой очистке
2. const myFunc = async () => = { try{ const {user} = await …. return user.uid } catch(e){ console.log(
Error ${e.messgae}
) } } myFunc вернет uid3. Вы должны отклонить с правильной ошибкой в
logUserInToApplication
. Теперь вы разрешаете его с помощью некоторого значения, у которого нет пользователя.4. Деструктурирование не выдаст вам нужную ошибку, оно все равно выдаст вам
undefined
ошибку. Вы должны выдать ошибку вkigUserInToApplication
функции или отклонить какую-либо ошибку, если вы используетеPromise
.
Ответ №1:
try {
const{ user } = await logUserInToApplication({ email, password })
console.log(user, 'usr')
if(user amp;amp; user.id){
await AsyncStorage.setItem('secureUid', user.uid)
await dispatch(getCurrentUser(user.uid))
} else {
setError('set Error message here')
}
setLoaded(true)
} catch (e) {
console.log(e, 'e')
setError(e.message)
setLoaded(true)
}
Ответ №2:
Проблема в том, что ваша logUserInApplication
функция не выдает ошибку;
try {
const user = await logUserInToApplication({ email, password })
console.log(user, 'usr')
if(!user.user.uid) throw({message: "User id not found"})
await AsyncStorage.setItem('secureUid', user.user.uid)
await dispatch(getCurrentUser(user.user.uid))
setLoaded(true)
} catch (e) {
console.log(e, 'e')
setPassword('')
setError(e.message)
setLoaded(true)
}
или вы должны выдать какую-либо ошибку или отклонить ошибку в своей logUserInToApplication
функции. Что-то вроде приведенного ниже:
const logUserInToApplication = async values => {
try {
const response = api.post(values);
if(response.user.uid)
return response.user;
throw({ message: "User not found" })
}
catch(e) { throw(e); }
}