AngularJSとWebワーカー
質問
angularJSはどのようにウェブワーカーを使用してバックグラウンドで処理を実行することができますか?これを行うために従うべきパターンはありますか?
現在、私は別のウェブワーカーにモデルを持つサービスを使用しています。このサービスは次のようなメソッドを実装しています。
ClientsFacade.calculateDebt(client1); //Just an example..
実装では、このメソッドはデータとともにワーカーにメッセージを送信します。これにより、別のスレッドで実行されていることを抽象化でき、サーバーに問い合わせる実装や、同じスレッドでこのアクションを実行するものも提供できますね。
私はjavascriptの初心者で、他のプラットフォームから持っている知識を再利用しているだけなので、これがあなたがすることなのか、あるいは私が使用しているAngularがこれを行う方法のようなものを提供しているのか疑問に思っています。また、ワーカーが明示的に変更をコントローラにプッシュし、コントローラがその値を更新して、それがビューに反映されるため、私のアーキテクチャに変更をもたらしますが、私はこれをエンジニアリングしすぎでしょうか?Web Worker がメモリの共有などを許可しないことで、私を失敗からそれほどまでに守ってくれることに、少し不満を感じています。
どのように解決するのですか?
Web ワーカーとの通信は、メッセージングメカニズムで行われます。これらのメッセージの傍受は、コールバックで行われます。AngularJSでは、Webワーカーを置くのに最適な場所は、あなたが正式に指摘したように、サービスの中です。これに対処する最良の方法はプロミスを使うことで、Angularはこれを驚くほどうまく扱います。
以下は
webworker
の中に
service
var app = angular.module("myApp",[]);
app.factory("HelloWorldService",['$q',function($q){
var worker = new Worker('doWork.js');
var defer = $q.defer();
worker.addEventListener('message', function(e) {
console.log('Worker said: ', e.data);
defer.resolve(e.data);
}, false);
return {
doWork : function(myData){
defer = $q.defer();
worker.postMessage(myData); // Send data to our worker.
return defer.promise;
}
};
});
これで、Hello World サービスにアクセスする外部のエンティティは、Hello World サービスの実装の詳細を気にする必要がなくなりました。
HelloWorldService
-
HelloWorldService
を介してデータを処理することができるかもしれません。
web worker
の上で
http
の上に置くか、その場で処理します。
これが意味をなすといいのですが。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] 画面サイズ、現在のウェブページ、ブラウザウィンドウのサイズを取得する
-
[解決済み] AngularJSでデータバインディングはどのように機能するのですか?
-
[解決済み] AngularJSを使用して、ブラウザのコンソールで$scope変数にアクセスするにはどうすればよいですか?
-
[解決済み] AngularJSで$scope.$watchと$scope.$applyを使用するにはどうすればよいですか?
-
[解決済み] 部分テンプレートとテンプレートの複雑なネスト
-
[解決済み] 文字列がすべて同じ部分文字列で構成されているかどうかを調べるにはどうすればよいですか?
-
[解決済み] 無効になっている入力フィールドの値を送信する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Angularjs - 現在の日付を表示する
-
[解決済み] Javascript / jQueryでAndroid端末を検出する。
-
[解決済み] moment.jsでミュータビリティを回避するには?
-
[解決済み] CORS: 認証モードは 'include' です。
-
[解決済み] Prototypeを使ってtextareaを自動サイズ調整するには?
-
[解決済み] HTML要素にスクロールバーがあるかどうかをチェックする
-
[解決済み] JavaScriptのArray.sort()メソッドでシャッフルするのは正しいのか?
-
[解決済み] V8 Javascript エンジンのスタンドアロン実行
-
[解決済み] これは純関数ですか?
-
[解決済み] Fetch: ステータスがOKでない場合、プロミスを拒否し、エラーをキャッチするか?