동시성 패턴

기본 장에서 우리는 이펙트 간의 동시성을 관리하기 위해 takeEverytakeLatest를 어떻게 사용하는지 배웠습니다.

이 장에서 우리는 이러한 헬퍼들이 어떻게 로우 레벨 이펙트를 사용하여 작동하는지 볼 것입니다.

takeEvery

function* takeEvery(pattern, saga, ...args) {
  const task = yield fork(function* () {
    while (true) {
      const action = yield take(pattern)
      yield fork(saga, ...args.concat(action))
    }
  })
  return task
}

takeEvery는 여러 개의 saga가 동시에 포크되게 합니다.

takeLatest

function* takeLatest(pattern, saga, ...args) {
  const task = yield fork(function* () {
    let lastTask
    while (true) {
      const action = yield take(pattern)
      if (lastTask)
        yield cancel(lastTask) // cancel is no-op if the task has already terminated

      lastTask = yield fork(saga, ...args.concat(action))
    }
  })
  return task
}

takeLatest는 여러 개의 사가 태스크들이 동시에 실행되게 하지 않습니다. 새로운 액션이 dispatch되자 마자, 그것은 자신을 제외한 이전의 모든 포크된 태스크를 취소합니다 (이미 작동 중이더라도).

takeLatest는 가장 나중의 응답만 받고 싶은 AJAX 요청을 다룰 때에 유용합니다.

results matching ""

    No results matching ""