2017-11-28 2 views

Antwort

2

zuerst, ich Objekte bin speichern, nicht Strings, so wird meine Lösung auf Objekt Fall basiert, wenn jemand Strings verwendet er expireAt Schlüssel das Objekt anhängen, dann wird er Datum ablaufen extrahieren und vergleichen ihn mit dem aktuellen Datum

Meine Lösung: -

/** 
* 
* @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; 
} 
2

AsyncStorage wirklich nur Griffe Lagerung und nichts darüber hinaus.

Wenn Sie einen Ablauf festlegen möchten, geben Sie einfach einen Schlüssel in Ihre Daten für das Zugriffsdatum ein und setzen Sie ihn auf new Date(). Wenn Sie dann Daten abrufen, überprüfen Sie den Ablaufschlüssel anhand des Zeitpunkts, zu dem er ablaufen sollte.