startAsyncAF method
void
startAsyncAF(
- AFDispatcher dispatcher,
- AFStore store, {
- required Completer<
AFFinishQuerySuccessContext> ? completer, - dynamic onResponseExtra(
- dynamic
- dynamic onErrorExtra(
- dynamic
override
Called internally when redux middleware begins processing a query.
Implementation
@override
void startAsyncAF(AFDispatcher dispatcher, AFStore store, {
required Completer<AFFinishQuerySuccessContext>? completer,
Function(dynamic)? onResponseExtra,
Function(dynamic)? onErrorExtra
}) {
final completerBool = Completer<bool>();
lastStart = currentMillis();
// start all the queries asynchronously.
for(final queryResponse in queryResponses.responses) {
final query = queryResponse.query;
query.startAsyncAF(dispatcher, store,
completer: null,
onResponseExtra: (dynamic localResponse) {
queryResponse.completeResponse(localResponse);
final isComp = queryResponses.isComplete;
if(isComp) {
if(!completerBool.isCompleted) {
completerBool.complete(true);
}
}
},
onErrorExtra: (dynamic error) {
queryResponse.completeError(error);
if(queryResponses.isComplete) {
if(!completerBool.isCompleted) {
completerBool.complete(true);
}
}
}
);
}
bool calledComplete = false;
// when they have all completed, then process our response.
completerBool.future.then((_) {
if(queryResponses.hasError) {
final errorContext = AFFinishQueryErrorContext(
conceptualStore: conceptualStore,
error: AFQueryError(code: queryFailedCode, message: queryFailedMessage)
);
if(!calledComplete) {
calledComplete = true;
finishAsyncWithErrorAF(errorContext);
if(completer != null) {
completer.completeError(errorContext);
}
}
} else {
final successContext = AFFinishQuerySuccessContext<AFCompositeQueryResponse>(
conceptualStore: conceptualStore,
response: queryResponses,
isPreExecute: false,
);
if(!calledComplete) {
calledComplete = true;
finishAsyncWithResponseAF(successContext);
if(completer != null) {
completer.complete(successContext);
}
}
}
});
}