ブラウザで実行され、メインプログラムとウェブワーカーで構成されるscala.jsアプリケーションを検討してください。Web Workerの応答メッセージを先物にする方法は?
メインスレッドは、メソッドの名前とそれらを呼び出すために必要なパラメータを含むメッセージを渡して、Webワーカーに長期実行操作を委任します。ワーカーはメソッドの戻り値を応答メッセージの形式でメインスレッドに戻します。
簡単な言葉で言えば、このプログラムはWebワーカーメッセージングを抽象化しているため、メインスレッドのコードはイディオムで非同期のScala構文でワーカースレッドのメソッドを呼び出すことができます。
Webワーカーはメッセージを自分のレスポンスに何らかの形で関連付けないので、抽象化は各クロスコンテキストメソッド呼び出しを管理するレジストリ、つまり仲介オブジェクトに依存しています。このシングルトンはコールバック関数をバインドすることもできますが、コールバックの代わりに先物を使ってこれを実現する方法はありますか?
このレジストリでは、プログラマが標準的な非同期プログラミング構造Scala:futureと約束を使用するための抽象概念を構築するにはどうすればよいですか?
スケーラプログラマが標準的な方法でそれとやりとりできるように、この機能をどのように書くべきですか?例:
// long running method in the web worker
val f: Future[String] = Registry.ultimateQuestion(42) // async
f onSuccess { case q => println("The ultimate question is: " + q) }
私は先物と約束事には新しいですが、いくつかの実行ブロックが終了すると通常完了するようです。この場合、Webワーカーからの応答を受け取ると、未来の完了を意味します。完了ステータスを外部プロセスに委譲するカスタム未来を書く方法はありますか? Webワーカーの応答メッセージを将来の状況にリンクする別の方法はありますか?
Can /未来の特性を拡張する必要がありますか?これはScala.jsで可能ですか?私が普及すべき具体的なクラスはありますか?既存の非同期Scala機能でこれらのクロスコンテキストWebワーカーメソッド呼び出しをカプセル化する他の方法はありますか?
ありがとうございました。
ああ!だからプロミスはプログラマーが一種のセッターを呼んで約束が成就したときを決めることができるのですか?これがうまくいけば、私はこの質問の名前を「私は約束が何か分からない!ありがとう、ジャスティン!:) –
正しい。プロミスと先物は基本的にはヒップで参加しています。プロミスを「プロデューサー」側とし、未来を「消費者側」と考えることができます。上記のパターンはPromiseを作成し、promise.futureを返します。実際に物事が完了したら、値のpromise.success()を呼び出すことは、「コールバック-y」APIを先物。 –