startAsyncAF method

  1. @override
void startAsyncAF(
  1. AFDispatcher dispatcher,
  2. AFStore store, {
  3. required Completer<AFFinishQuerySuccessContext>? completer,
  4. dynamic onResponseExtra(
    1. dynamic
    )?,
  5. dynamic onErrorExtra(
    1. 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);
          }
        }
      }
    });
}