Blog>
Snippets

Implementing an actionChannel for Serial Processing

Shows how to use Redux-Saga's actionChannel to queue effectful actions for processing one at a time, preventing race conditions and ensuring the integrity of state updates in scenarios where order of execution is critical.
import { take, call, actionChannel } from 'redux-saga/effects';
function* handleRequest(payload) {
  // Process each request here
  console.log('Handling request', payload);
}

function* watchRequests() {
  // 1- Create a channel for request actions
  const requestChan = yield actionChannel('REQUEST');
  while (true) {
    // 2- take from the channel
    const { payload } = yield take(requestChan);
    // 3- Note that we're using a blocking call
    yield call(handleRequest, payload);
  }
}
This code snippet demonstrates how to use Redux-Saga's actionChannel to ensure that each 'REQUEST' action is processed one at a time. First, it creates a channel specifically for 'REQUEST' actions. Then, it continuously takes actions from this channel and processes them using a blocking call. This ensures that no new 'REQUEST' action is taken until the current one has finished processing.