2016-10-25 4 views
1

Я пытаюсь реализовать обработчик очереди для управления уведомлениями с помощью генератора редукции-саги.Очередь процесса с 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); 
     } 
    } 
} 

Проблема с текущей реализацией является то, что, когда очередь пуста QUQUE_NOTIFICATION отправляется генератор может ждать задержки, чтобы закончить.
Однако я хочу показать первое уведомление, как только оно войдет в очередь. Есть идеи?

ответ

2

У меня была такая же идея для уведомления (очереди их), однако сага предоставляет уже реализованное решение с точки зрения каналов. у меня есть:

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

который я считаю элегантное решение вашей проблемы. showNotification - это еще одна функция, которая фактически показывает уведомления и немного ждет, прежде чем снимать ее.