= 데이터 요청> 로컬 캐시 데이터 캐시가 + 만료 된 적이
=> 사용 가능한
=> 사용할 수 없음
파일로 캡슐화 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) }) . 캐치 ((오차) => { ) (에러 거부 }) )} } }
주요 렌더링을 보여 시간을 이전 또는 변경되지 않습니다 요청 된 데이터 후, 만료 시간보다 더 이상이 없기 때문에