0
3つのエフェクトのうち2つが競合して、レースに勝つとサーバーからリフレッシュする必要があります。スマートウェイ2アウト3レースサクサエフェクトと同じフォローアップフロー
私は現在、それを行う方法は次のとおりです。レースのリターン結果を容易にするよりスマートな方法がある場合
function* refreshItems() {
while (true) {
bool refreshFromServer = true
const { nextRefresh, items } = yield call(fetchItems)
const racer = {
duration: call(delay, 60*1000),
manual: take(REFRESH_ITEMS),
}
if (nextRefresh > 0) {
racer.remote = call(delay, nextRefresh * 1000)
}
const { remote, manual, duration } = yield race(racer)
refreshFromServer = remote || manual
// alternative: refreshFromServer = !duration
}
}
を私は疑問に思うが?
ありがとうございます。これは本当にそのような構成で動作しますか?私は2つの遅延を使用しています。なぜなら、ローカルタイマーだけを更新する必要がある場合( 'duration')、サーバーヒットを防ぎたいからです。 – philk
はい、テストしていませんが、作成する必要があります。レースは他のエフェクトの最初のものが終了するのを待ってから残りをキャンセルする効果です。レースがキャンセルされると、すべてのレーサーがキャンセルされます。だから、レーサーの1人がレースであるとき、適切なことが起こるはずです REの持続時間:遅延は基本的にちょうどsetTimeoutですか? nextRefresh <60の場合は安全にリフレッシュすることができ、それ以上の場合はレースから省略することができます – WuTheFWasThat
継続リフレッシュに関するnextRefreshのヒント。あなたの答えには少しでも不具合があります。 'refreshRace'もレースでなければなりません。だから 'refresh:race(refreshRace)'それはうまくいきます。 – philk