CacheData.ets 1.64 KB
/**
 * 接口数据存储封装类
 */
import { DateTimeUtils, StringUtils } from 'wdKit/Index';
import { CacheDataSaveUtil } from './CacheDataSaveUtil';

export class CacheData {
  // 接口返回数据
  networkData?: object;
  // 数据更新时间戳
  updateTimeInMillis: number = 0;
  // 接口返回md5,用于判断接口数据是否更新
  md5: string = '';

  constructor(md5: string, timeMillis: number, networkData: object) {
    this.md5 = md5
    this.updateTimeInMillis = timeMillis
    this.networkData = networkData
  }

  /**
   * 根据新旧md5值进行判断,是否需要刷新数据
   * @param responseMd5 新值,接口返回
   * @returns
   */
  needRefreshByMd5(responseMd5: string): boolean {
    if (StringUtils.isEmpty(this.md5) || StringUtils.isEmpty(responseMd5)) {
      return false
    }
    return this.md5 != responseMd5
  }

  static saveCacheData(cacheKey: string, data: object, responseMd5: string) {
    if (!data) {
      return
    }
    let time = DateTimeUtils.getTimeStamp()
    let cacheData = new CacheData(responseMd5, time, data)
    CacheDataSaveUtil.save(cacheKey, JSON.stringify(cacheData))
  }

  /**
   * 获取缓存数据
   */
  static getLocalCacheData(key: string): Promise<CacheData | null> {
    return new Promise<CacheData | null>((success) => {
      if (StringUtils.isEmpty(key)) {
        success(null)
        return
      }
      let ll = CacheDataSaveUtil.get(key)
      if (ll instanceof Promise) {
        ll.then((data) => {
          let str = data as string
          let cache = JSON.parse(str) as CacheData
          success(cache)
        })
      } else {
        success(null)
      }
    })
  }
}