2017-12-31 166 views
0

サンクからサガに移動したばかりなので、setTimeoutを呼び出してから別の関数(この場合はcorewar.step())を呼び出す最良の方法を見つけようとしています。これは私が期待していたように機能する私の元のコードでした。setIntervalでredux-sagaを使用する - いつ、どのようにするか

runner = window.setInterval(() => { 

    for(let i = 0; i < processRate; i++) { 
     corewar.step() 
    } 

    operations += processRate; 

    }, 1000/60) 

このコードはsagaの内側にあると私は私がアプリケーション内の他の地域で行われてきたようにcall内の関数呼び出しをラップすることができるはずと信じています。

私はsetIntervalの呼び出しをcallにラップして、それ以外はすべてそのまま残してみました。その結果、step()は決して呼び出されません。

runner = yield call(window.setInterval,() => { 

    for(let i = 0; i < processRate; i++) { 
     corewar.step() 
    } 

    operations += processRate; 

    }, 1000/60) 

は、私はそれがあるとしてsetIntervalを残して、通話中にstep()機能をラップしても決して呼ばれませんされてstep()になりfunction*への匿名関数のシグネチャを変更し、試してみました。

runner = window.setInterval(function*() { 

    for(let i = 0; i < processRate; i++) { 
     yield call([corewar, corewar.step]) 
    } 

    operations += processRate; 

    }, 1000/60) 

は最後に、私は再び呼び出されることはありませんされてstep()、その結果、両方をラップしようとしました。

runner = yield call(window.setInterval, function*() { 

    for(let i = 0; i < processRate; i++) { 
     yield call([corewar, corewar.step]) 
    } 

    operations += processRate; 

    }, 1000/60) 

私の質問があるので、私はここで何かが欠けてるように感じる、私は全くcallでこれらの機能をラップする必要があるか、この間違っている必要がありますか?私はcallに外側setIntervalをラップすることになっていたら質問に従って

は私もputまたはcall自体のいずれかを得たいcallへのパラメータとして関数を定義する必要がありますどのようにでしょうか?

答えて

1
const anotherSaga = function *() { 
    const runner = yield call(setInterval,() => { 
    console.log('yes'); 
    }, 1000); 
    console.log(runner); 
} 

これはかなりうまく動作します。あなたの2番目のスニペットでは、末尾にダブル)があります。

+0

私は発電機をCBパラメータとして使用しようとしているのではないかと思います(余分な括弧はqから削除されています) – dougajmcdonald

関連する問題