nativeFutureToPromise method

JSFValue? nativeFutureToPromise(
  1. Future fut
)
inherited

将 dart 中的 Future 转为 js 中的 promise

Implementation

JSFValue? nativeFutureToPromise(Future fut) {
  final id = fut.hashCode;
  final ntpV = eval('''
var __FLUJS__nativeToFutureResult${id}__ = {};
new Promise(function(resolve, reject) { __FLUJS__nativeToFutureResult${id}__.resolve = resolve; __FLUJS__nativeToFutureResult${id}__.reject = reject;});
''', sourceURL: 'nativeToFuture');
  fut.then(
    (value) {
      var encoded = value;
      Console.info(
        'nativeFutureToPromise -> $value, ${value.runtimeType}',
      );
      if (value is JSFValue) {
        try {
          encoded = value.toJs();
        } catch (e, st) {
          Console.error(
            'nativeFutureToPromise: $encoded, ${e.toString()}, ${st.toString()}',
          );
        }
      }
      Console.info(
        'nativeFutureToPromise: $encoded, ${encoded.runtimeType}',
      );
      eval(
        '__FLUJS__nativeToFutureResult${id}__.resolve($encoded); __FLUJS__nativeToFutureResult${id}__ = null;',
        sourceURL: 'nativeToFuture.resolve',
      );
    },
    onError: (error, st) {
      Console.error(
        'nativeFutureToPromise error1 -> ${error.toString()}, ${st.toString()}',
      );
      eval(
        '__FLUJS__nativeToFutureResult${id}__.reject("$error"); __FLUJS__nativeToFutureResult${id}__ = null;',
        sourceURL: 'nativeToFuture.reject',
      );
    },
  ).catchError((error, st) {
    Console.error(
      'nativeFutureToPromise error2 -> ${error.toString()}, ${st.toString()}',
    );
    eval(
      '__FLUJS__nativeToFutureResult${id}__.reject("$error"); __FLUJS__nativeToFutureResult${id}__ = null;',
      sourceURL: 'nativeToFuture.reject',
    );
  });
  return ntpV;
}