Асинхронная функция не ожидает AsyncStorage в перехватчике useEffect. Реагировать Нативно

#javascript #react-native #async-await #use-effect #asyncstorage

#javascript #react-native #асинхронный-ожидание #использовать-эффект #asyncstorage ( асинхронное хранилище )

Вопрос:

Я пытаюсь получить свой поддельный токен (‘successful_fake_token’) с помощью AsyncStorage, который я могу получить хорошо, но после .затем блок закончил свою работу.

 function loadUsers() {
        setUsers({ users: [], hasLoadedUsers: false, userLoadingErrorMessage: '' });
        getUsers().then( (res) =>
            setUsers({
                users: res.users,
                hasLoadedUsers: true,
                userLoadingErrorMessage: ''
            })
        ).catch(handleUserLoadingError(res));
    }

    useEffect(() => {
        loadUsers();
    }, []);

function handleUserLoadingError(res) {
        if (res.error === 401) {
            props.navigation.navigate('Login');
        } else {
            console.log('hanlde erreur');
            setUsers({
                users: [],
                hasLoadedUsers: false,
                userLoadingErrorMessage: res.message,
            });
        }
    }
 

Комментарии:

1. Не обрабатывайте ошибки, выполняя return null , если только вам на самом деле не нужен токен — в этом случае вам не нужно было бы вызывать getToken функцию в первую очередь.

2. Сообщение об ошибке ясное и правильное. В .catch(handleUserLoadingError(res)) , res не определено. Что handleUserLoadingError делает и как это определяется, может быть, вы имели в виду catch(handleUserLoadingError) ?

3. Боже мой, ты прав @Bergi, проблема возникает из .catch(handleUserLoadingError(res)) -за того, что должно быть catch(handleUserLoadingError)