Dva: 在effect里setInterval定时修改状态时,yield put不起作用

Created on 23 Feb 2018  ·  9Comments  ·  Source: dvajs/dva

* foo_effect({ payload }, { put }) {
  let interval = setInterval(() => {
    co(function* () {
      console.log('baz')
      yield put({ type: 'foo_reducer' })
    })
  }, 1000)
}

baz能被打印出来,但是foo_reducer没有被执行,求助

All 9 comments

不能用 setInterval(() => {})

应该把setInterval(() => {})封装成一个异步函数然后yield吧

大佬能帮忙详细说说吗?
setInterval是可以执行的,是不是yield reducer有啥限制?
@sorrycc

const delay = ms => new Promise(resolve => setTimeout(resolve, ms))
// or import { delay } from 'redux-saga'

* foo_effect({ payload }, { put }) {
  while (true) {
    console.log('baz')
    yield put({ type: 'foo_reducer' })
    yield delay(1000)
  }
}

这应该能实现你想要的结果,请多查看redux-saga的文档

@objectisundefined 有另外的代码会取消的,在这里没写出来 - -

@objectisundefined while(true) 路子有点野 - -,这样后续还想执行别的代码就不行了

@miaojiuchen
while(true) 还好吧,还有大神用 switch(true)

https://github.com/jnotnull/dva-generator/issues/2#6 effects中在回调中执行其他effects

我往foo_effect的payload中传入参数,根据参数判断是否继续定时请求,这种做法不行,该怎么改?@objectisundefined

Was this page helpful?
0 / 5 - 0 ratings