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 にはそれに対処する方法がありますか、それともそれを管理するのが私の仕事ですか?