我尝试在节点 6.2.1 上运行下一个代码。它记录1、2,然后卡住。我无法理解为什么它不继续执行到行 yield take('TEST')... 似乎 anotherSaga 完成并记录 2 但控制权没有返回给 rootSaga。任何人都可以帮助我吗?
const {runSaga, delay} = require('redux-saga');
const {take, put, call} = require('redux-saga/effects');
function* anotherSaga() {
yield call(delay, 1000);
console.log(2);
}
function* rootSaga() {
while(true) {
console.log(1);
yield call(anotherSaga);
console.log(3);
const action = yield take('TEST');
console.log(4);
yield put(action);
}
}
runSaga(
rootSaga(),
{
subscribe(callback) {
return setInterval(() => (callback({type: 'TEST'})), 1000);
},
dispatch(action) {
console.log(action);
},
getState() {}
}
);
更新:但没有 runSaga 的代码按预期工作,记录 1,2,3,4
const {createStore, applyMiddleware} = require('redux');
const createSagaMiddleware = require('redux-saga').default;
const {delay} = require('redux-saga');
const {take, put, call} = require('redux-saga/effects');
function* anotherSaga() {
yield call(delay, 2000);
console.log(2);
}
function* rootSaga() {
while(true) {
console.log(1);
yield call(anotherSaga);
console.log(3);
const action = yield take('TEST');
console.log(4);
yield put(action);
console.log('---')
}
}
const rootReducer = (state, action) => {
if (state === undefined) {
return {};
}
return state;
}
const sagaMiddleware = createSagaMiddleware();
const store = createStore(rootReducer, {}, applyMiddleware(sagaMiddleware));
sagaMiddleware.run(rootSaga);
setInterval(() => (store.dispatch({type: 'TEST'})), 1000);