2017-10-31 2 views
0

Angular 4でアプリを書く際に、バックグラウンドでいくつかのメソッド(タスク|プロセス|ジョブ)を実行する必要があり、ユーザーが現在行っていることに関係なく、バックグラウンドで他のタスクと並行して実行する必要がありましたどのコンポーネントを使用しているかを示します。他の人をブロックしないようにそのメソッドを実行します。Typescript角動作ラウンドパラレルタスク

このバックグラウンドメソッドはポーリングの実現であるため、定期的に一定の間隔でサーバーに要求を送信して、オブジェクトの現在の状態を確認します。

理想的には、いくつかの時間帯にサーバーに要求を送信していくつかのオブジェクトの状態を求めるこのようなメソッドのコレクションを作成する方法を知ることが理想的です。そしてそれらのどれもが他人をブロックしない。

私の質問は、このようなメソッド/メソッドのコレクションを書くための最良の正しい方法です。

これはあなたの時間を費やすために前もってありがとうございます!

P.S. :混在並列性&並行性の用語を出します。実際には、この記事の並列性について言及していますが、これは並行性を意味します。

同時実行性とは、2つ以上のタスクが重複して開始、実行、完了できる場合です。必ずしも両方が同じ瞬間に走っていることを意味するわけではありません。例えば。シングルコアマシンでのマルチタスキング。

並列性は、タスクが文字通り同時に実行される場合です。マルチコアプロセッサ

RichieHindle(C)

+0

Webワーカーを検索してください。 –

答えて

1

私はそれがベストプラクティスですかどうかわからないんだけど、私は私のプロジェクトでシミュレーションを再生するには、非同期play()機能を実行していますよ。それにはwhile(true)ループがあり、そのループはsocket.ioを呼び出して、シミュレーションからクライアントへのラインを送信し、それに従ってビューを更新するようサーバーに指示します。

は、あなたのケースに適応:その後、

var updateEveryMS = 1000; 

async poll() { 
    while (true) { 
    // code to poll server and update models and view ... 
    await this.sleep(updateEveryMs); 
} 

sleep(ms) { 
    return new Promise(resolve => setTimeout(resolve, ms)); 
} 

とページが読み込まれた後、それを起動するngAfterViewInit()

ngAfterViewInit() { 
    poll(); 
} 

poll()を呼び出します。

+0

うまくありがとう、私はそれがうまくいくと思うが、それは最高の解決策ではない私の意見 – komron

+0

@komron確かに、今私はそれを考えると、少し不器用です。おそらく、setInterval(()=> {poll_server())のようなものをngAfterViewInitに入れることができるかもしれません。次に((answer)=> {update_view(answer);});}、updateEveryMs); poll_serverは、サーバーからの応答を解決する約束を返す関数です。 –

+0

また、私はこれも悪い解決策ではないと思います – komron

関連する問題