我试图在setInterval()
方法内调用生成器函数。此代码的目的是它将定期查询特定服务器的某些数据,直到获得非零响应为止。收到响应后,它将调用storeAddress()
,这是在同一文件中定义的生成器函数。
下面的代码给我这样的错误:
SyntaxError:yield是保留字(248:6)
注意:我正在使用react-boilerplate构建我的应用。据我通过搜索互联网得知,上述错误是由通天塔抛出的。
我尝试了const query = yeild call (setInterval, function(){magic code}, 10000)
。这不会产生错误,但是magic code
永远不会执行。
我尝试了const query = setInterval(function* () {magic code}, 10000)
,其效果与上述相同。
我尝试了const query = setInterval(yield call(function(){magic code}, 10000)
,效果与上述相同。
我尝试了const query = yield call (setInterval, function(){magic code}, 10000)
,其效果与上述相同。
我在storeAddress(action.payload, balance).next()
内尝试过setInterval()
。控件确实在storeAddress()
内部流动,但是该函数内部也具有生成器调用,而该生成器调用不会被调用。实际上,在这种情况下,storeAddress()
内部的第一个生成器调用之后什么也不会执行。
function* callSaveNewAddress(action){
const selectedNetwork = yield select(selectNetworkId());
let count = 1;
let balance = 0;
const query = setInterval(function () {
getAddressBalance(action.payload, selectedNetwork).then(res =>
{return balance = res.data.mempool_balance});
if(balance > 0) {
yield call (storeAddress, action.payload, balance);
clearInterval(query);
} else if(count == 90) {
clearInterval(query);
console.log("Nothing received in 15 minutes");
}
}, 10000);
}
那么我该如何在像storeAddress()
这样的普通函数中调用setInterval()
这个生成器函数呢?
答案 0 :(得分:0)
const query= function * () {
const runner = yield call(setInterval, () => {
getAddressBalance(action.payload, selectedNetwork).then(res =>
{return balance = res.data.mempool_balance});
if(balance > 0) {
yield call (storeAddress, action.payload, balance);
clearInterval(query);
} else if(count == 90) {
clearInterval(query);
console.log("Nothing received in 15 minutes");
}
}, 1000);
}
尝试在调用中使用setInterval,并通过参数传递要在其中执行的函数。