2017-12-31 22 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 내에서 호출을 래핑 할 수 있어야한다고 생각합니다.

나는 call에서 setInterval 호출을 래핑하고 그 밖의 모든 것은 그대로 두었습니다. 결과적으로 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에 매개 변수로 함수를 정의 할 방법 일 것 call에 외부 setInterval을 포장 하죠 경우 중 하나 put 또는 call 자체?

답변

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

이것은 꽤 잘됩니다. 두 번째 스 니펫에는 끝에 ) 두 개가 있습니다. 단 하나 여야합니다.

+0

흠, CB 매개 변수로 발전기를 사용하려고하는 이상한 조합이 있었음에 틀림 없습니다. (추가 브래킷은 오타 였고 q에서 제거되었습니다) – dougajmcdonald

관련 문제