パッケージには、ネイティブのオフラインキャッシュフレームワークを反応させます

=データ要求>ローカル・キャッシュ・データ・キャッシュは、+期限が切れていることがあります

=>利用可能

=>はご利用いただけません

ファイルにカプセル化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); 
            }) キャッチ((エラー)=> { 
              拒否(エラー); 
            })
    })
  } 


}
コードの表示

 

主なレンダリングが表示さ:要求されたデータの前または後の時間は変更されません、有効期限よりも多くはありませんので、

おすすめ

転載: www.cnblogs.com/liuw-flexi/p/11571884.html