使用 redux-saga 处理队列

Dzi*_*mid 1 generator redux redux-saga

我正在尝试使用 redux-saga 生成器实现一个队列处理程序来管理通知。

基本上,我需要在通知进入队列时按顺序显示通知。

为此,我queue在 redux 存储中有一个数组,一个QUQUE_NOTIFICATION添加到队列和SHOW_NOTIFICATION删除队列通知的操作。

我目前的传奇实现就是这么简单:

export function* watchQueue() {
    while (true) {
        const state = yield select()
        const queue = state.queue
        if (queue.length > 0) {
            yield put({ action: 'SHOW_NOTIFICATION', queue[0])
        }
        yield call(delay, 5000);
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

当前实现的问题在于,当队列为空时QUQUE_NOTIFICATION,调度生成器可能会等待延迟完成。
但是,我想在它进入队列后立即显示第一个通知。有任何想法吗?

Mad*_*Nat 5

我对显示通知(将它们排队)也有同样的想法,但是 saga 提供了已经实施的渠道解决方案。我有:

export function * notificationSaga () {                                                  
  const requestChan = yield actionChannel(Notification.request)                          
  while (true) {                                                                         
    const { payload } = yield take(requestChan)                                          
    yield call(showNotification, payload)                                                
  }                                                                                      
}
Run Code Online (Sandbox Code Playgroud)

我相信这是您问题的优雅解决方案。showNotification 是另一个功能,它实际上显示通知并在将其关闭之前稍等片刻。