2016-10-25 4 views
1

Ich versuche, einen Warteschlangenhandler für die Verwaltung von Benachrichtigungen mit einem Redux-Saga-Generator zu implementieren.Prozesswarteschlange mit Redux-Saga

Grundsätzlich muss ich Benachrichtigungen nacheinander anzeigen, wie sie die Warteschlange eingeben.

Dazu habe ich eine queue Array in der redux Speicher, eine Aktion QUQUE_NOTIFICATION Aktion zu Warteschlange und SHOW_NOTIFICATION hinzuzufügen, um eine Meldung für die Warteschlange zu entfernen.

Meine aktuelle Saga Implementierung ist, dass einfach:

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); 
     } 
    } 
} 

Das Problem bei der aktuellen Implementierung ist, dass, wenn eine Warteschlange leer ist ein QUQUE_NOTIFICATION wird ausgelöst Generator wartet werden kann, um die Verzögerung zu beenden.
Ich möchte jedoch die erste Benachrichtigung anzeigen, sobald sie in die Warteschlange eintritt. Irgendwelche Ideen?

Antwort

2

Ich hatte die gleiche Idee für die Anzeige von Benachrichtigungen (in der Warteschlange), aber Saga bietet bereits implementierte Lösung in Bezug auf Kanäle. ich habe:

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

die ich glaube, elegante Lösung für Ihr Problem. showNotification ist eine weitere Funktion, die Benachrichtigungen anzeigt und ein wenig wartet, bevor sie heruntergefahren wird.