Могу ли я использовать генераторы es6 системы redux-saga в качестве прослушивателя onmessage для веб-сокетов или источника событий?
Я пытаюсь заставить Саудовскую Сагу работать сonmessage
слушатель. Я не знаю, почему то, что у меня есть, не работает.
У меня есть следующие настройки.
// sagas.js
import { take, put } from 'redux-saga';
import {transactions} from "./actions";
function* foo (txs) {
console.log("yielding"); // appears in console
yield put(transactions(txs)); // action *is not* dispatched
console.log("yielded"); //appears in console
}
const onMessage = (event) => {
const txs = JSON.parse(event.data);
const iter = foo(txs);
iter.next(); // do I really need to do this?
};
function* getTransactions() {
while(yield take('APP_LOADED')) {
const stream = new EventSource(eventSourceUrl);
stream.onopen = onOpen;
stream.onmessage = onMessage;
stream.onerror = onError;
// this is just testing that `yield put` works
yield put(transactions([{baz : 42}])); //this action *is* dispatched
}
};
КогдаAPP_LOADED
действие отправленоgetTransactions
вызывается, поток открывается и слушатель onMessage вызывается при получении данных с сервера, но мне не везет в отправке действия при вызовеyield put(transactions(txs))
в генератореfoo
.
Может кто-нибудь сказать мне, что я делаю не так?