process<T extends JSAny, R> method

Future<R?> process<T extends JSAny, R>(
  1. ({bool next, R? result}) processor(
    1. T? result
    )
)

Implementation

Future<R?> process<T extends JSAny, R>(
    ({bool next, R? result}) Function(T? result) processor) {
  final completer = Completer<R?>();

  onsuccess = (Event event) {
    var request = event.target as IDBRequest;
    var cursor = request.result as T?;

    var (next: next, result: r) = processor(cursor);

    if (!next) {
      completer.completeSafe(r);
    } else {
      if (cursor.isA<IDBCursor>()) {
        // ignore: invalid_runtime_check_with_js_interop_types
        var iDBCursor = cursor as IDBCursor;
        iDBCursor.continue_();
      }
    }
  }.toJS;

  onerror = (Event event) {
    var request = event.target as IDBRequest;
    var error = request.error;

    if (error != null) {
      completer.completeErrorSafe(error);
    } else {
      completer.completeErrorSafe("`IDBRequest` error!");
    }
  }.toJS;

  return completer.future;
}