execute<T> method
基于异步回调方式 支持同时请求和缓存策略 对于外部可接收多种状态的数据 建议使用此方式。
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);
}
}