redux-saga에 완전히 새로운 것으로, 액션 LANGUAGE_START_CYCLE
에 반응하여 매 3 초마다 동작 LANGUAGE_CYCLE
을 반복합니다.Redux Saga를 사용하여 X 초마다 Dispatch 액션을 수행
그러나은 절대로 LANGUAGE_START_CYCLE
을 Redux 저장소로 보내면 예상대로 실행되지 않습니다.
내가 뭘 잘못하고 있는지 알기! 내 다른 무용담들이 잘 돌아가고있는 것처럼 단순한 실수라고 의심 될 것이다. 작업하는 내 다른 무용담 중 하나의
// constants/ActionTypes.js
export const LANGUAGE_SET_ACTIVE = "LANGUAGE_SET_ACTIVE";
export const LANGUAGE_START_CYCLE = "LANGUAGE_START_CYCLE";
export const LANGUAGE_STOP_CYCLE = "LANGUAGE_STOP_CYCLE";
export const LANGUAGE_CYCLE = "LANGUAGE_CYCLE";
// actions/language.js
export const cycleLanguage =() => {
return {
type: ActionTypes.LANGUAGE_CYCLE
}
};
// languageSaga.js
import { actionChannel, call, take, put, race } from 'redux-saga/effects'
import * as ActionTypes from '../constants/ActionTypes';
import * as actions from '../actions/language';
const wait = ms => {
new Promise(resolve => {
setTimeout(() => resolve(), ms)
})
};
export default function * languageSaga() {
const channel = yield actionChannel(ActionTypes.LANGUAGE_START_CYCLE);
while (yield take(channel)) {
while (true) {
const { stopped } = yield race({
wait: call(wait, 3000),
stopped: take(ActionTypes.LANGUAGE_STOP_CYCLE)
});
if (!stopped) {
yield put(actions.cycleLanguage());
} else {
break;
}
}
}
}
// sagas.js (root sagas)
export default function * sagas() {
yield [
directorySaga(), // Another saga which works fine
pusherSaga(), // Another saga which works fine
languageSaga()
]
}
예 :
// directorySaga.js
function * fetchDirectory(action) {
try {
const directory = yield call(Api.fetchDirectory, action.id);
yield put(fetchDirectorySucceeded(directory));
} catch (e) {
yield put(fetchDirectoryFailed(e.message));
}
}
export default function * directorySaga() {
yield * takeLatest(ActionTypes.DIRECTORY_REQUESTED, fetchDirectory);
}
미안하지만 실제로 여기에서 잘못된 점을 말하지 않으므로 도움이되지 않습니다. 당신은 무엇을 파견합니까, 당신은 무엇을 기대합니까, 당신은 무엇을 얻습니까? –
문제는 'LANGUAGE_START_CYCLE'을 (를) 디스패치 할 때 내 사기가 내 경주 효과를 실행하지 않는다는 것입니다. 나는 모든 것을 시도하거나 잡으려 고 노력했지만 아무런 결과도 얻지 못했다. 이 문제를 해결하는 방법에 대한 힌트가 있습니까? – janhartmann
로그를 저장하고 인쇄 할 것인지 말 것인지를 지정하십시오. 나는 거기에 루프에 들어가는 지조차 모른다. :) –