fix(client): check for error out put in fetch query and infinite query and mutateMutation immediate resolve

This commit is contained in:
Kingkor Roy Tirtho
2023-03-02 18:22:04 +06:00
parent 64d661779a
commit 9e8959820f
+90 -49
View File
@@ -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>?