Код выполняется несколько раз внутри оператора if React-Native AsyncStorage - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь сохранить в асинхронном хранилище некоторые данные, когда телефон не подключен к Интернету.Вернувшись в оперативный режим, я извлекаю эти данные с помощью getData ().

У меня есть список некоторых документов на домашней странице, затем, когда я выбираю один из них, он переходит на следующую страницу и отображает содержимое.После этого я могу отправить этот документ по электронной почтеТаким образом, проблема здесь: в первый раз он получает только один раз, но когда я пытаюсь вернуться к списку документов, которые я показываю, и выбрать один из них, я пытаюсь отправить, когда в автономном режиме, а затем, когда он снова в сети, он отправляетодин и тот же дваждыИ сколько раз я возвращаюсь и пытаюсь заполнить новый документ, он будет посылать его равным количеству раз, когда я отправлял электронные письма.

Вот мой код ...

Хранение данных:

 storeData = async (data) => {
        try {
            await AsyncStorage.setItem('key', JSON.stringify(data));
        } catch (e) {
            console.log("Some error happened", e);
        }
    }

восстановление после возврата в оперативный режим:

> getData = async () => {
> 
>         try {
>             const value = await AsyncStorage.getItem('key')
> 
>             let valueParsed = JSON.parse(value);
> 
> 
>             if (value != null) {
>                 fetch(this.state.url, {
>                     method: 'POST',
>                     headers: {
>                         Accept: 'application/json',
>                         'Content-Type': 'application/json',
>                         'Connection': 'Keep-Alive',
>                     },
>                     credentials: 'include',
>                     body: JSON.stringify(valueParsed)
>                 })
>                 await AsyncStorage.clear();
>             }
>         } catch (e) {
>             // error reading value
>         }

>     }

и componentDidMount () :

componentDidMount() { //checking if there is internet connection
    NetInfo.isConnected.addEventListener('connectionChange', (isConnected) => {
                   if (isConnected) {
                            this.getData();
        }
    })
}
...