이 패키지는 기본 오프라인 캐싱 프레임 워크를 반응

= 데이터 요청> 로컬 캐시 데이터 캐시가 + 만료 된 적이

=> 사용 가능한

=> 사용할 수 없음

파일로 캡슐화 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) 
          그 때는 ((wrapData) => {
               경우(wrapData && DataStore.chekTimestampValid (wrapData.timestamp)) { 
                해결 (wrapData); 
              } 
              다른 {
                 .fetchNetData (URL) 
                    그 때는 ((데이터) => { 
                      해결 ( ._wrapData (데이터)) 
                      }) 
                    . 캐치 ((오차) => { 
                      ) 오류 (거부; 
                    }) 
                  } 
          }) 
          . 캐치 ((오차) => {
              .fetchNetData (URL)
                그 때는 ((데이터) =>을 { 
                  해결 ( ._wrapData (데이터)) 
                }) 
                . 캐치 ((에러 => { 
                  (오류)를 거부; 
            })) 
          )} 
      )} 
  } 

  // 本地缓存数据有效期检查
  정적 chekTimestampValid (소인) { 
    CONST하는 currentDate = ) (날짜; 
    const를 targetDate = 새로운 날짜 (); 
    targetDate.setTime (타임 스탬프); 
    경우 (currentDate.getMonth는 ()! == targetDate.getMonth ()) 반환  거짓 ;
    만약(currentDate.getDate () == targetDate.getDate는 ()!) 돌아  거짓 ;
    경우 (currentDate.getHours () - targetDate.getHours ()> 4) 돌아  거짓 ; 

    반환  사실 ; 
  } 

  // 获取网络数据
  fetchNetData (URL) {
     돌아가  새로운 약속 ((해결 거부) => { 
      () URL을 가져 
            그 때는 ((대응) => {
               경우 (response.ok) {
                 복귀 response.json (); 
              } 
              던져  새로운 ( '네트워크 응답 확인되지 않음'오류 ); 
            }) 
            그 때는 ((드 responseData) => {
               .saveData (URL, 드 responseData) 
              리졸 (드 responseData) 
            }) 
            . 캐치 ((오차) => { 
              ) (에러 거부 
            }) 
    )} 
  } 


}
코드보기

 

주요 렌더링을 보여 시간을 이전 또는 변경되지 않습니다 요청 된 데이터 후, 만료 시간보다 더 이상이 없기 때문에

추천

출처www.cnblogs.com/liuw-flexi/p/11571884.html