使用redux-saga处理队列

时间:2016-10-25 14:14:15

标签: redux generator redux-saga

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

基本上,我需要在他们进入队列时连续显示通知。

为此,我在redux商店中有一个queue数组,一个动作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);
      }
    }
}

当前实现的问题是,当队列为空时,调度QUQUE_NOTIFICATION生成器可以等待延迟完成。
但是,我想尽快显示第一个通知进入队列。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

我有同样的想法来显示通知(排队)但是saga提供了已经实现的通道解决方案。 我有:

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

我认为这是对您的问题的优雅解决方案。 showNotification是另一个实际显示通知的函数,在关闭之前会等待一段时间。