fix(client): check for error out put in fetch query and infinite query and mutateMutation immediate resolve
This commit is contained in:
@@ -52,6 +52,7 @@ class QueryClient {
|
||||
RefreshConfig refreshConfig = DefaultConstants.refreshConfig,
|
||||
JsonConfig<DataType>? jsonConfig,
|
||||
}) async {
|
||||
try {
|
||||
DataType? result;
|
||||
final completer = Completer<DataType>();
|
||||
final query = createQuery<DataType, ErrorType>(
|
||||
@@ -64,14 +65,23 @@ class QueryClient {
|
||||
);
|
||||
|
||||
final subscription = query.dataStream.listen((data) {
|
||||
completer.complete(data);
|
||||
if (!completer.isCompleted) completer.complete(data);
|
||||
});
|
||||
|
||||
final errorSubscription = query.errorStream.listen((error) {
|
||||
if (!completer.isCompleted)
|
||||
completer.completeError(error != null ? error : "");
|
||||
});
|
||||
|
||||
result = await query.fetch();
|
||||
result ??= await completer.future;
|
||||
|
||||
errorSubscription.cancel();
|
||||
subscription.cancel();
|
||||
return result;
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Query<DataType, ErrorType>? getQuery<DataType, ErrorType>(
|
||||
@@ -135,6 +145,7 @@ class QueryClient {
|
||||
RetryConfig retryConfig = DefaultConstants.retryConfig,
|
||||
RefreshConfig refreshConfig = DefaultConstants.refreshConfig,
|
||||
JsonConfig<DataType>? jsonConfig}) async {
|
||||
try {
|
||||
DataType? result;
|
||||
final completer = Completer<DataType>();
|
||||
final query = createInfiniteQuery<DataType, ErrorType, PageType>(
|
||||
@@ -148,14 +159,23 @@ class QueryClient {
|
||||
);
|
||||
|
||||
final subscription = query.dataStream.listen((event) {
|
||||
completer.complete(event.data);
|
||||
if (!completer.isCompleted) completer.complete(event.data);
|
||||
});
|
||||
|
||||
final errorSubscription = query.errorStream.listen((event) {
|
||||
if (!completer.isCompleted)
|
||||
completer.completeError(event.data != null ? event.data! : "");
|
||||
});
|
||||
|
||||
result = await query.fetch();
|
||||
result ??= await completer.future;
|
||||
|
||||
errorSubscription.cancel();
|
||||
subscription.cancel();
|
||||
return result;
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
InfiniteQuery<DataType, ErrorType, PageType>?
|
||||
@@ -230,6 +250,9 @@ class QueryClient {
|
||||
List<String> refreshQueries = const [],
|
||||
List<String> refreshInfiniteQueries = const [],
|
||||
}) async {
|
||||
try {
|
||||
DataType? result;
|
||||
final completer = Completer<DataType>();
|
||||
final mutation = getMutation<DataType, ErrorType, VariablesType>(
|
||||
key,
|
||||
) ??
|
||||
@@ -240,10 +263,28 @@ class QueryClient {
|
||||
retryConfig: retryConfig,
|
||||
)
|
||||
: null);
|
||||
final result = await mutation?.mutate(variables);
|
||||
|
||||
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>?
|
||||
|
||||
Reference in New Issue
Block a user