2016-05-18 5 views
4

私は、2次プロセスでWebワーカーを使用してイベントロガーを処理しています。作業者はイベントをローカルで収集し、数秒ごとにバッチとして送信します。Webワーカーが終了する前にアクションを実行する方法はありますか?

ブラウザまたはタブが閉じると、未送信のバッチを送信する方法が必要です。 Webワーカーがoncloseイベントのようなものを聞く方法はありますか?

私はアプリケーション自体でこれを行うことができますが、ロガーは複数の場所で使用されるノードパッケージであり、フロントエンドにイベントロガーのクリーンアップを担当させたくありません。

+0

私は、たとえウィンドウがブルースクリーンであっても、常に報道を望んでいる高品質の人たちの狂気を経験してきました。彼らには不可能だと言って、彼らは議論しません:) –

+0

これは役に立ちますか? https://developer.mozilla.org/en-US/docs/Web/API/WorkerGlobalScope/onclose – dlkulp

+0

@dlkulpああ、男、私はそう望みます。私はそれを試してみましょう。 – JesseF

答えて

2

ウェブワーカー仕様のprocessing modelセクションには何も記載されていません。特に、「ワーカーを殺す」と「ワーカーを終了する」セクションはありません。私はあなたが選択肢が多すぎるとは思わないが、UIスレッド上のコードにワーカーにメッセージを送信してクリーンアップするよう指示する。

+1

それは私が来るという結論でもありますが、私が逃した何かがあることを期待していました。私はこれをしばらく開いたままにしておきますが、奇跡を避けて、これを解決策としてマークすることになります。 – JesseF

+0

@JesseF:ええ、私は少なくとも一日中それを与えるだろう。間違っているとうれしいです。 –

2

self.onclose = function() { ... };のように、作業員を閉じたときに呼び出されるようです。詳細はhereをご覧ください。労働者は独自のコンテキストを持っているので、WorkerGlobalScopeを介してスコープにアクセスする必要があります。 WorkerGlobalScope.selfを公開すると、onclose()などのイベントにアクセスできるようになります。

ここで注意しなければならないのは、APIが標準化されていないということです。サポートされているかどうかを確認するにはブラウザをチェックする必要があります(MicrosoftがこれをIE/Edgeでうまく実装していないようです)。このクロスプラットフォームを実現する最善の方法はおそらく@ T.Jです。 CrowderはUIにコードを記述して、作業者に閉じるように指示しました。

+0

私は今、それをしようとしている、まだ働くことを得ていない。 Chromeでのテスト(サポートされていると思われます)、FFでも試してみましょう。 – JesseF

+0

アップデート:Firefoxでも動作しないようです。 IE/Edgeを気にするつもりはありません。 – JesseF

+0

更新2:さらなる研究の後、close()メソッドはまだ実験的であり、互換性は疑わしいですね。それが完全に焼かれたら、私は後でこれを見直す必要があるように見える。 – JesseF

関連する問題