load method
加载扩展
Implementation
@override
load() {
super.load();
eval(_promiseJSCode, sourceURL: "promiseJSCode");
addInterface('__onResolved', (args) {
Console.info('__onResolved ${args.toString()}');
try {
Map map = jsonDecode(args[0]);
Console.info('__onResolved: map= ${map.toString()}');
var id = map['id'];
var value = map['value'];
Console.info(
'__onResolved, type id: ${id.runtimeType}, ${id is int}, hasCompleter:${_completers.containsKey(id)}, ${value.runtimeType}',
);
if (id is int && _completers.containsKey(id)) {
_completers[id]?.complete(
value != null ? context.makeString(value) : context.makeNull(),
);
_completers.remove(id);
var ret = eval(
'__FLUJS_PROMISE_CLEAN__($id)',
sourceURL: "FLUJS_PROMISE_CLEAN.JSCode",
);
Console.info('__onResolved: clean is Error: ${ret.isError()}');
} else {
Console.info(
'[__onResolved] invalid arguments or donot have completer: ${id.runtimeType}',
);
}
} catch (e, st) {
// ignore: avoid_print
Console.error(
'[__onResolved] parse js arguments failed: ${e.toString()}, ${st.toString()}',
);
}
});
addInterface('__onRejected', (args) {
Console.info('__onRejected ${args.toString()}');
try {
Map map = jsonDecode(args[0]);
var id = map['id'];
var value = map['value'];
Console.info(
'__onRejected: map= ${map.toString()}, ${value.runtimeType}',
);
if (id is int && _completers.containsKey(id)) {
_completers[id]?.completeError(value);
_completers.remove(id);
var ret = eval(
'__FLUJS_PROMISE_CLEAN__($id)',
sourceURL: "FLUJS_PROMISE_CLEAN.JSCode",
);
Console.info('__onRejected: clean is Error: ${ret.isError()}');
} else {
Console.info(
'[__onRejected] invalid arguments or donot have completer: $id, ${_completers.keys.toString()}',
);
}
} catch (e, st) {
Console.error(
'[__onRejected] parse js arguments failed: ${e.toString()}, ${st.toString()}',
);
}
});
}