์ : setInterval (function () {yield call (api, param)}, 1000)
์ด๋ป๊ฒ ์ธํฐํ์ด์ค๋ฅผ ํด๋ง ํ ์ ์์ต๋๊น? yield๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์ํ๋ฅผ ์๋ ํ ์ ์์ต๋๋ค.
while (true) {
yield call(delay, 1000);
yield call(api, params);
}
์ด์ ๊ฐ์ด ์ง์ฐ์ ์์ฑํ๋ฉด undefind๊ฐ redux-saga์ ์ ํธ๋ฆฌํฐ์ ์๋ค๊ณ ๋ณด๊ณ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฉด dva๊ฐ ์ง์ฐ์ ์ด๋ป๊ฒ ๋์ ํด์ผํฉ๋๊น?
const delay = timeout => {
return new Promise(resolve => {
setTimeout(resolve, timeout);
});
};
์ฐ๋ฆฌ ํ๋ก์ ํธ๋ ํ์ฌ dva๋ก ๋ฆฌํฉํ ๋ง๋์์ผ๋ฉฐ ์ด์ ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ํ์ ๋, ํ์ ๋, ๊ฐ์ฌํฉ๋๋ค.
๋ฐฉ๊ธ ์๋ํด ๋ณด์์ต๋๋ค. ์๋ํฉ๋๋ค. @sorrycc ๊ฐ์ฌํฉ๋๋ค! ! !
@sorrycc ํ์ด์ง์์ด ํด๋ง์ ์ข ๋ฃํ๋ ค๋ ์์ ์ด ์์ต๋๋ค. ์ด๋ป๊ฒํด์ผํฉ๋๊น?
์๋
ํ์ธ์,
saga์ ์ดํํธ ์ฒ๋ฆฌ์ ๋ํ ์์ธํ ํํ ๋ฆฌ์ผ์ด ์์ต๋๊น? ํด๋ง ์ข
๋ฃ, ์ฌ์คํ ๋ฑ๊ณผ ๊ฐ์ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ํ๋๊ทธ๋ก ๊ฐ์ง ํ ์ ์์ผ๋ฉฐ cancel, fork, takeLatest๋ ์์ต๋๋ค. ๋ช ๊ฐ์ง ์์ ๋ฅผ ๋ฐฐ์ธ ์ ์๋์ง ๊ถ๊ธํฉ๋๋ค.
๊ฐ์ฌํฉ๋๋ค.
@sorrycc ๋ค์ ๋ฌผ์ด๋ณด๊ณ ์ถ์ต๋๋ค.์ด ๊ฒฝ์ฐ ํน์ ์ด๋ฒคํธ๊ฐ ํธ๋ฆฌ๊ฑฐ ๋ ๋ ๋ฃจํ๋ฅผ ์ค์ง ํ ์ ์๋ค๋ฉด ์ด๋ป๊ฒ๋ฉ๋๊น?
redux-saga์ ํฌํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ ์์ฑํ๊ณ ํ์ํ ๋ ์์ ์ ์ทจ์ํด์ผํฉ๋๋ค.
* forkInterval(actions, { fork, cancelled, put }) {
globalInterval = yield fork(function* () {
try {
while (true) {
yield delay(3000);
yield put({ type: 'youraction' });
}
} finally {
if (yield cancelled()) {
// ๅๆถไนๅ็ๆไฝ๏ผ่ฟ้ไปไน้ฝไธๅ
}
}
});
},
* clearInterval(actions, { cancel }) {
yield cancel(globalInterval);
},
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ