toFuture method

Future<JSAny?> toFuture()

Implementation

Future<JSAny?> toFuture() {
  final completer = Completer<JSAny?>();

  late void Function() cleanup;

  void success(Event _) {
    if (!completer.isCompleted) {
      completer.complete(result);
    }
    cleanup();
  }

  void fail(Event _) {
    if (!completer.isCompleted) {
      completer.completeError(error ?? 'IDBRequest error');
    }
    cleanup();
  }

  final successJS = success.toJS;
  final failJS = fail.toJS;

  cleanup = () {
    removeEventListener('success', successJS);
    removeEventListener('error', failJS);
  };

  addEventListener('success', successJS);
  addEventListener('error', failJS);

  return completer.future;
}