Как я могу установить срок действия AsyncStorage - реагировать родной

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

Документация AsyncStorage, но нет параметров для установки истечения по истечении определенного времени.

Доступны только следующие варианты:-

AsyncStorage.removeItem 

3 ответа

Решение

Во -первых, я храню объекты, а не строки, поэтому мое решение будет основано на случае объекта, если кто-либо использует строки, он может добавить expireAt ключ объекта, тогда он извлечет дату окончания срока действия и сравнивает ее с текущей датой

мое решение:-

/**
 *
 * @param urlAsKey
 * @param expireInMinutes
 * @returns {Promise.<*>}
 */
async getCachedUrlContent(urlAsKey, expireInMinutes = 60) {

    let data = null;

    await AsyncStorage.getItem(urlAsKey, async (err, value) => {

        data = (JSON.parse(value));

        // there is data in cache && cache is expired
        if (data !== null && data['expireAt'] &&
            new Date(data.expireAt) < (new Date())) {

            //clear cache
            AsyncStorage.removeItem(urlAsKey);


            //update res to be null
            data = null;
        } else {

            console.log('read data from cache  ');

        }
    });

    //update cache + set expire at date
    if (data === null) {
        console.log('cache new Date ');

        //fetch data
        data = fetch(urlAsKey).then((response) => response.json())
            .then(apiRes => {

                //set expire at
                apiRes.expireAt = this.getExpireDate(expireInMinutes);

                //stringify object
                const objectToStore = JSON.stringify(apiRes);

                //store object
                AsyncStorage.setItem(urlAsKey, objectToStore);


                console.log(apiRes.expireAt);
                return apiRes;
            });

    }

    return data;


},

/**
 *
 * @param expireInMinutes
 * @returns {Date}
 */
getExpireDate(expireInMinutes) {
    const now = new Date();
    let expireTime = new Date(now);
    expireTime.setMinutes(now.getMinutes() + expireInMinutes);
    return expireTime;
}

AsyncStorage действительно обрабатывает только хранилище и ничего кроме этого.

Если вы хотите установить срок действия, просто введите ключ в свои данные для даты доступа и установите его в new Date(), Затем, когда вы извлекаете данные, проверяйте дату на ключе срока действия, основываясь на том, когда он должен истечь.

Вы также можете использовать это, улучшение от ответов Ахмеда Фарага Мостафы

Другие вопросы по тегам