execute<T> method

void execute<T>({
  1. Success<T>? success,
  2. Failure? failure,
  3. Completed? completed,
})

基于异步回调方式 支持同时请求和缓存策略 对于外部可接收多种状态的数据 建议使用此方式。

Implementation

void execute<T>({Success<T>? success, Failure? failure, Completed? completed}) async {
  if (!(await _checkNetWork())) {
    completed?.call();
    return;
  }
  _cacheMode ??= (_rxNet._baseCacheMode ?? CacheMode.onlyRequest);
  if (_cacheMode == CacheMode.onlyRequest) {
    return _doWorkRequest(
        success: success,
        failure: failure,
        completed: completed);
  }

  if (_cacheMode == CacheMode.firstCacheThenRequest) {
    return _readCache(success, failure,(){
      _doWorkRequest(
          success: success,
          failure: failure,
          completed: completed,
          cache: true);
    });
  }

  if (_cacheMode == CacheMode.requestFailedReadCache) {
    return  _doWorkRequest(
        success: success,
        failure: failure,
        completed: completed,
        cache: true,
        readCache: () {
          _readCache(success, failure,completed);
        });
  }

  if (_cacheMode == CacheMode.cacheNoneToRequest) {
    if (_requestIgnoreCacheTime) {
      return _doWorkRequest(
          success: success,
          failure: failure,
          completed: completed,
          cache: true);
    }
    return _readCache(
        success, (e) {
           // 缓存读取错误,则发起请求
          _doWorkRequest(
              success: success,
              failure: failure,
              completed: completed,
              cache: true
          );
        },
        completed,
        cacheInvalidationCallback: () {
          //无缓存,或者缓存过期,发起请求
          _doWorkRequest(
              success: success,
              failure: failure,
              completed: completed,
              cache: true
          );
        });
  }
  if (_cacheMode == CacheMode.onlyCache) {
    return _readCache(success, failure,completed);
  }
}