=データ要求>ローカル・キャッシュ・データ・キャッシュは、+期限が切れていることがあります
=>利用可能
=>はご利用いただけません
ファイルにカプセル化DataStore.jsコードは、主にあって、ローカルからデータを取得し、ローカルのタイムスタンプ要求データエントリを作成する、ネットワークからデータを取得します
「反応ネイティブ」からインポート{AsyncStorage} 。 輸出デフォルトのクラスのデータストア{ // 保存数据 SaveDataを(URL、データ、コールバック){ 場合(データ|| URL!)リターン。 AsyncStorage.setItem(URL、JSON.stringify(この._wrapData(データ))、コールバック); } _wrapData(データ){ リターン {データ:データ、タイムスタンプ:新。日付()getTime()}。 } // 获取本地数据 fetchLocalData(URL){ 戻り 、新たな約束((決意、リジェクト)=> { AsyncStorage.getItem(URL、(誤り、結果) => { もし(!のエラー){ しようと{ 決意(JSON.parse(結果)); } キャッチ(E){ (E)を拒絶します。 console.error(E); } } そうでなければ{ (エラー)を拒否。 console.error(エラー) } }) }) } // 离线缓存的入口 なFetchData(URL){ 戻り 新しい =>)、プロミス((決意を拒否{ この.fetchLocalData(URL) .then((wrapData) => { もし(wrapData && DataStore.chekTimestampValid(wrapData.timestamp)){ 解決(wrapData)。 } 他{ この.fetchNetData(URL) .then((データ) => { 解決(この._wrapData(データ)); }) 。キャッチ((エラー)=> { 拒否(エラー); }) } }) 。キャッチ((エラー)=> { この .fetchNetData(URL) .then((データ)=> { 解決(この._wrapData(データ))。 }) 。キャッチ((エラー=> { (エラー)を拒否; })) }) }) } // 本地缓存数据有效期检查 静的chekTimestampValid(タイムスタンプ){ CONST CURRENTDATEは = 新しい日付(); constのtargetDate = 新しい日付(); targetDate.setTime(タイムスタンプ)。 もし(!currentDate.getMonth()== targetDate.getMonth())は返す 偽。 もし(!currentDate.getDate()== targetDate.getDate())は返す 偽。 もし(currentDate.getHours() - targetDate.getHours()> 4)を返す 偽。 返す 真; } // 获取网络数据 fetchNetData(URL){ 戻り 、新たな約束((決意、リジェクト)=> { フェッチ(URL) .then((応答) => { 場合(response.ok){ 戻りresponse.json()。 } スロー 新しい(「ネットワーク応答OKではない」エラーを); }) .then((responseData) => { この.saveData(URL、responseData) 解決(responseData); }) 。キャッチ((エラー)=> { 拒否(エラー); }) }) } }
主なレンダリングが表示さ:要求されたデータの前または後の時間は変更されません、有効期限よりも多くはありませんので、