例如 setInterval(function(){yield call(api,param)},1000)
怎么才可以轮询接口,如果不用yield 会导致我操作不了state
while (true) {
yield call(delay, 1000);
yield call(api, params);
}
这样写 delay会报undefind 是在redux-saga的utils中,那dva该如何引入delay
const delay = timeout => {
return new Promise(resolve => {
setTimeout(resolve, timeout);
});
};
我们项目目前都用dva重构了,现在遇到这问题,小弟在此谢谢谦哥啦
刚试了,好用了,太感谢了 @sorrycc !!!
@sorrycc 页面上有个操作想终止这个轮询,请问该怎么处理呢?
hi,
关于saga的effect处理有没有详细的教程呢?我遇到同样的问题,比如终止轮询、重新运行等,简单的方法可以用flag来检测,另外还有cancel,fork,takeLatest,这些不知道大家能给一些例子学习下?
谢谢。
@sorrycc 再请问一下,如果这样的话,如果才能在触发某些事件的时候停止循环呢?
需要用 redux-saga 的 fork 来处生成一个 Task,在需要的时候取消 Task 即可。
* 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);
},
Most helpful comment