0

間隔で繰り返し(無限)非同期ジョブを行う(Calmm stack, Kefir, Karet Utils etc.で)最もエレガントな方法は何ですか?間隔を指定して非同期要求を実行するカームウェイ?

は、私はいくつかのJSONすべての2000msgetたい。

例1(2000ミリ秒間隔):

  1. フェッチJSON
  2. ハンドルJSON
  3. 間隔に残され、残りの時間を待って、ステップ1
からやり直し( getは100ミリ秒を要します)

例2(2000ms間隔)

  1. get秒を繰り返しするために、ステップ1と2は、短期で1

のでステップで再び開始する前に終了するまで

  • は、私が欲しい待ちJSON(getが5000msを取る)
  • ハンドルJSONを取得(または任意の非同期作業)とリクエスト間2000msの最小値を待ちます。

    は私が以前のものはいくつかの方法(成功、失敗、タイムアウト)に終了するまで次の要求が起動する必要はありません。

  • +0

    興味があるだけ、「Calmm」とは何ですか?またはケフィア、またはカレットUtils同様に? – evolutionxbox

    +0

    これは 'Angular'と' RXJS'についてですが、主な概念は全く同じですので、私はこれはすでにここに答えていると思う:https://stackoverflow.com/questions/44540703/return-promise-every-1-を分/ 44540833#44540833あなたがここにcalmm確認することができ – Hitmands

    +0

    @evolutionxbox https://github.com/calmm-js/documentation/blob/master/introduction-to-calmm.md –

    答えて

    0

    これは私がKefir.streamに頼ることなくケフィアでそれを行うだろうかです。以下のjobは、あなたが各目盛りで行う作業であることに注意してください。コードを動作させるためのダミーのタスクをスタブしました。以下は

    let result = Kefir.repeat(() => { 
        let job = Kefir.later(Math.random() * 5000); 
        let wait = Kefir.later(2000).ignoreValues(); 
        return Kefir.merge([job, wait]); 
    }); 
    

    ケフィアのドキュメントからのスタイルを使用してイベントを視覚化したものです:

    spawned 1 - job: ------1X 
    spawned 1 - wait: -----------X 
    spawned 1 - merge: ------1----X 
    spawned 2 - job:    ------------------2X 
    spawned 2 - wait:    -----------X 
    spawned 2 - merge:    ------------------2X 
    spawned 3 - job:         ---3X 
    spawned 3 - wait:         -----------X 
    spawned 3 - merge:         ---3-------X 
    result:   ------1-----------------------2----3--------... 
    
    関連する問題