从thunk转移到sagas之后,我试图找到最佳的调用方法setTimeout
,然后从该函数中调用另一个函数(在这种情况下corewar.step()
)。这是我的原始代码,符合我的预期。
runner = window.setInterval(() => {
for(let i = 0; i < processRate; i++) {
corewar.step()
}
operations += processRate;
}, 1000/60)
这段代码位于a里面saga
,我相信我应该能够call
像在应用程序其他区域一样包装函数调用。
我尝试将setInterval
呼叫包装在中,call
而将其他所有内容都保留下来,这导致step()
永不被调用。
runner = yield call(window.setInterval, () => {
for(let i = 0; i < processRate; i++) {
corewar.step()
}
operations += processRate;
}, 1000/60)
我试过了,将其保持不变,setInterval
并将step()
函数包装在调用中,并更改匿名函数签名,function*
这也导致step()
永不被调用。
runner = window.setInterval(function*() {
for(let i = 0; i < processRate; i++) {
yield call([corewar, corewar.step])
}
operations += processRate;
}, 1000/60)
最后,我尝试将两者包装在一起,这再次导致step()
永不被调用。
runner = yield call(window.setInterval, function*() {
for(let i = 0; i < processRate; i++) {
yield call([corewar, corewar.step])
}
operations += processRate;
}, 1000/60)
感觉好像我在这里丢失了一些东西,所以我的问题是,我是否应该将这些功能call
全部包装起来,还是这是错误的?
如果我应该将外部包裹setInterval
在一个问题中,那么接下来的问题是我应该call
如何将一个函数定义为一个call
也要产生aput
或call
自身的参数?
const anotherSaga = function * () {
const runner = yield call(setInterval, () => {
console.log('yes');
}, 1000);
console.log(runner);
}
这对我来说很好。在您的第二个片段)
的末尾有一个双精度字,应该只有一个。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句