fix(client): check for error out put in fetch query and infinite query and mutateMutation immediate resolve
This commit is contained in:
@@ -52,26 +52,36 @@ class QueryClient {
|
|||||||
RefreshConfig refreshConfig = DefaultConstants.refreshConfig,
|
RefreshConfig refreshConfig = DefaultConstants.refreshConfig,
|
||||||
JsonConfig<DataType>? jsonConfig,
|
JsonConfig<DataType>? jsonConfig,
|
||||||
}) async {
|
}) async {
|
||||||
DataType? result;
|
try {
|
||||||
final completer = Completer<DataType>();
|
DataType? result;
|
||||||
final query = createQuery<DataType, ErrorType>(
|
final completer = Completer<DataType>();
|
||||||
key,
|
final query = createQuery<DataType, ErrorType>(
|
||||||
queryFn,
|
key,
|
||||||
initial: initial,
|
queryFn,
|
||||||
retryConfig: retryConfig,
|
initial: initial,
|
||||||
refreshConfig: refreshConfig,
|
retryConfig: retryConfig,
|
||||||
jsonConfig: jsonConfig,
|
refreshConfig: refreshConfig,
|
||||||
);
|
jsonConfig: jsonConfig,
|
||||||
|
);
|
||||||
|
|
||||||
final subscription = query.dataStream.listen((data) {
|
final subscription = query.dataStream.listen((data) {
|
||||||
completer.complete(data);
|
if (!completer.isCompleted) completer.complete(data);
|
||||||
});
|
});
|
||||||
|
|
||||||
result = await query.fetch();
|
final errorSubscription = query.errorStream.listen((error) {
|
||||||
result ??= await completer.future;
|
if (!completer.isCompleted)
|
||||||
|
completer.completeError(error != null ? error : "");
|
||||||
|
});
|
||||||
|
|
||||||
subscription.cancel();
|
result = await query.fetch();
|
||||||
return result;
|
result ??= await completer.future;
|
||||||
|
|
||||||
|
errorSubscription.cancel();
|
||||||
|
subscription.cancel();
|
||||||
|
return result;
|
||||||
|
} catch (e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Query<DataType, ErrorType>? getQuery<DataType, ErrorType>(
|
Query<DataType, ErrorType>? getQuery<DataType, ErrorType>(
|
||||||
@@ -135,27 +145,37 @@ class QueryClient {
|
|||||||
RetryConfig retryConfig = DefaultConstants.retryConfig,
|
RetryConfig retryConfig = DefaultConstants.retryConfig,
|
||||||
RefreshConfig refreshConfig = DefaultConstants.refreshConfig,
|
RefreshConfig refreshConfig = DefaultConstants.refreshConfig,
|
||||||
JsonConfig<DataType>? jsonConfig}) async {
|
JsonConfig<DataType>? jsonConfig}) async {
|
||||||
DataType? result;
|
try {
|
||||||
final completer = Completer<DataType>();
|
DataType? result;
|
||||||
final query = createInfiniteQuery<DataType, ErrorType, PageType>(
|
final completer = Completer<DataType>();
|
||||||
key,
|
final query = createInfiniteQuery<DataType, ErrorType, PageType>(
|
||||||
queryFn,
|
key,
|
||||||
nextPage: nextPage,
|
queryFn,
|
||||||
initialParam: initialParam,
|
nextPage: nextPage,
|
||||||
retryConfig: retryConfig,
|
initialParam: initialParam,
|
||||||
refreshConfig: refreshConfig,
|
retryConfig: retryConfig,
|
||||||
jsonConfig: jsonConfig,
|
refreshConfig: refreshConfig,
|
||||||
);
|
jsonConfig: jsonConfig,
|
||||||
|
);
|
||||||
|
|
||||||
final subscription = query.dataStream.listen((event) {
|
final subscription = query.dataStream.listen((event) {
|
||||||
completer.complete(event.data);
|
if (!completer.isCompleted) completer.complete(event.data);
|
||||||
});
|
});
|
||||||
|
|
||||||
result = await query.fetch();
|
final errorSubscription = query.errorStream.listen((event) {
|
||||||
result ??= await completer.future;
|
if (!completer.isCompleted)
|
||||||
|
completer.completeError(event.data != null ? event.data! : "");
|
||||||
|
});
|
||||||
|
|
||||||
subscription.cancel();
|
result = await query.fetch();
|
||||||
return result;
|
result ??= await completer.future;
|
||||||
|
|
||||||
|
errorSubscription.cancel();
|
||||||
|
subscription.cancel();
|
||||||
|
return result;
|
||||||
|
} catch (e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
InfiniteQuery<DataType, ErrorType, PageType>?
|
InfiniteQuery<DataType, ErrorType, PageType>?
|
||||||
@@ -230,20 +250,41 @@ class QueryClient {
|
|||||||
List<String> refreshQueries = const [],
|
List<String> refreshQueries = const [],
|
||||||
List<String> refreshInfiniteQueries = const [],
|
List<String> refreshInfiniteQueries = const [],
|
||||||
}) async {
|
}) async {
|
||||||
final mutation = getMutation<DataType, ErrorType, VariablesType>(
|
try {
|
||||||
key,
|
DataType? result;
|
||||||
) ??
|
final completer = Completer<DataType>();
|
||||||
(mutationFn != null
|
final mutation = getMutation<DataType, ErrorType, VariablesType>(
|
||||||
? createMutation<DataType, ErrorType, VariablesType>(
|
key,
|
||||||
key,
|
) ??
|
||||||
mutationFn,
|
(mutationFn != null
|
||||||
retryConfig: retryConfig,
|
? createMutation<DataType, ErrorType, VariablesType>(
|
||||||
)
|
key,
|
||||||
: null);
|
mutationFn,
|
||||||
final result = await mutation?.mutate(variables);
|
retryConfig: retryConfig,
|
||||||
await this.refreshQueries(refreshQueries);
|
)
|
||||||
await refreshInfiniteQueriesAllPages(refreshInfiniteQueries);
|
: null);
|
||||||
return result;
|
|
||||||
|
final subscription = mutation?.dataStream.listen((data) {
|
||||||
|
if (!completer.isCompleted) completer.complete(data);
|
||||||
|
});
|
||||||
|
|
||||||
|
final errorSubscription = mutation?.errorStream.listen((error) {
|
||||||
|
if (!completer.isCompleted)
|
||||||
|
completer.completeError(error != null ? error : "");
|
||||||
|
});
|
||||||
|
|
||||||
|
result = await mutation?.mutate(variables);
|
||||||
|
result ??= await completer.future;
|
||||||
|
|
||||||
|
errorSubscription?.cancel();
|
||||||
|
subscription?.cancel();
|
||||||
|
|
||||||
|
await this.refreshQueries(refreshQueries);
|
||||||
|
await refreshInfiniteQueriesAllPages(refreshInfiniteQueries);
|
||||||
|
return result;
|
||||||
|
} catch (e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Mutation<DataType, ErrorType, VariablesType>?
|
Mutation<DataType, ErrorType, VariablesType>?
|
||||||
|
|||||||
Reference in New Issue
Block a user