nativeFutureToPromise method
将 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;
}