我有一个 Dart js-interop 回调,它反过来将一个 javascript 回调作为参数。dart 回调实现如下所示:
void callBackToDartCode(String query, js.FunctionProxy completionCallback) {
js.context.completionCallback = completionCallback;
doSomethingAscyn(query).then(
(result) {
// hand the query result back to the javascript code
js.context.completionCallback(js.map(result));
});
这行得通。完成这项工作的关键是将 FunctionProxy 保存在 js.context 中,以便在异步“then”方法中执行它时可用。这行代码很重要:
js.context.completionCallback = completionCallback;
如果未完成,则不会保留 completeCallback,因此在异步操作完成时无法调用。
我没有见过这样的例子,我不确定我是否真的正确地做到了这一点。
它提出了以下问题:
- 调用完“completeCallback”与 js.context 后如何解除关联?它是否永远与 js.context 保持关联?
- 如果同时进行多个异步操作,则在 js.context 中使用名称“completionCallback”似乎会发生冲突。这让我觉得这是一个普遍的问题。js-interop 有办法解决这个问题,还是我的工作是管理它?