在 rn 中使用离缓存,首先我们使用 AsyncStorege
来实现缓存,下面开始实现:
export default class DataStore {
/// 保存数据
saveData(url,data, callback) {
if (!data || !url) return;
AsyncStorage.setItem(url, JOSN.stringify(this._wrapData(data)), callback)
}
// 获取本地数据 fetchLocalData(url) { return new Promise((resolve, reject) => { AsyncStorage.getItem(url, (error, result) => { if (!error) { try { resolve(JSON.parse(result)) } catch (e) { reject(e); console.error(e); } } else { reject(error); console.error(error); } }) }) } }
对 data
进行处理
/// 处理data _wrapData(data) { return { data: data, timestamp: new Date().getTime() } }
获取网络数据
// 获取网络数据 fetchDNetData(url) { return new Promise((resolve, reject) => { fetch(url) .then((response) => { // 判断是否请求成功,返回正确的字段 if (response.ok) { return response.json() } throw new Error(response.error()) }) .then((responseData) => { /// 为了节流,将数据保存在本地,设置过期时间 this.saveData(url, responseData); resolve(responseData); }) .catch((e) => { /// 抛出拦截的错误信息 reject(e); console.error(e); }) }) }
离线缓存主要实现
/// 离线缓存实现 /// 主要思想: 首先会在本地查找数据是否存在,如果存在那么使用本地,否则使用网络数据 fetchData(url) { return new Promise((resolve, reject) => { /// 首先会在本地查找数据是否存在,如果存在那么使用本地,否则使用网络数据 this.fetchDNetData(url).then((wrapData) => { /// 如果本地有数据,并且数据在有效时期内 if (wrapData && DataStore.checkTimestampValid(wrapData)) { resolve(wrapData); } else { this.fetchDNetData(url) .then(data => { resolve(this._warperData(data)) }) .catch(e => { reject(e); console.error(e); }) } }) .catch(e => { /// 如果出错会直接再次获取数据 this.fetchDNetData(url) .then(data => { resolve(this._warperData(data)); }) .catch(e => { reject(e); console.error(e); }) }) }) }
检查是否过期
/// 检查保存数据时效性是否过期 static checkTimestampValid(timestamp) { const currentDate = new Date(); const targetDate = new Date(); targetDate.setTime(timestamp); if (currentDate.getFullYear() !== targetDate.getFullYear()) return false; if (currentDate.getMonth() !== targetDate.getMonth()) return false; if (currentDate.getDate() !== targetDate.getDate()) return false; if (currentDate.getHours() !== targetDate.getHours() > 4) return false; return true; }
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于