2016-12-09 3 views
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 
    } 
} 

내가 궁금해?

답변

0

길은 괜찮은 것처럼 보이지만 할 수있는 한 가지는 인종을 구성하는 것입니다. (테스트되지 않은) 식으로 뭔가 : BTW

function* refreshItems() { 
    while (true) { 
    const { nextRefresh, items } = yield call(fetchItems) 
    const refreshRace = { 
     manual: take(REFRESH_ITEMS) 
    } 
    if (nextRefresh > 0) { 
     refreshRace.remote = call(delay, nextRefresh * 1000) 
    } 
    const racer = { 
     duration: call(delay, 60*1000), 
     refresh: race(refreshRace), 
    } 
    const { refresh, duration } = yield race(racer) 
    ... just use refresh, now 
    } 
} 

, 기타 사항 :

  • 이 지연 인종이
  • 이 정확하게 당신이 원하는에 따라, 당신은 아마 디 바운스를 사용할 수 약간 바보 같다? 또는 비슷한 것을 써주세요
+0

감사합니다. 이게 정말 그런 작곡과 잘 맞나요? 로컬 타이머 만 업데이트 ('duration')해야하는 경우 서버 히트를 방지하기 위해 2 지연을 사용하고 있습니다. – philk

+0

예, 테스트를 거치지는 않지만 작성해야한다고 생각합니다. 인종은 다른 효과 중 첫 번째 효과가 끝날 때까지 기다린 다음 나머지를 취소하는 효과입니다. 경주가 취소되면 모든 경주자가 취소됩니다. 그래서 레이서 중 하나가 경주 일 때, 적절한 일이 발생해야합니다 RE 지속 시간 : 지연은 기본적으로 단지 setTimeout입니까? nextRefresh가 60보다 작 으면 안전하게 새로 고칠 수 있고, 더 큰 경우 레이스에서 제외 할 수 있습니다. – WuTheFWasThat

+0

지속 시간 새로 고침과 관련하여 nextRefresh가 좋은 팁입니다. 귀하의 대답에 하나의 작은 고장. 'refreshRace' 또한 경주가되어야합니다. 그래서'refresh : race (refreshRace)'그러면 작동합니다. – philk