我如何设置AsyncStorage的到期日期 - 做出本机反应

时间:2017-11-28 17:03:48

标签: react-native asyncstorage

我正在使用反应原生异步存储它运行良好但在某些情况下,我必须设置数据的到期日期并刷新我检查的存储空间

AsyncStorage documentation但是在特定时间后没有设置过期的选项。

唯一可用的选项是: -

AsyncStorage.removeItem 

2 个答案:

答案 0 :(得分:3)

AsyncStorage实际上只处理存储,除此之外什么都没有。

如果您想设置过期日期,只需在数据中输入密钥以获取访问日期,然后将其设置为new Date()。然后,当您提取数据时,请根据到期时间对过期密钥进行日期检查。

答案 1 :(得分: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;
}