![](/img/trans.png)
[英]Passing function as a parameter and using in setInterval for javascript
[英].then() is not working in setInterval function while passing parameter?
下面是我的代码,我收到此错误Unhandled Rejection (TypeError): startPolling.bind(...).then is not a function
setInterval(startPolling.bind(null, id).then(function(response){
if (response.id == 0){
console.log("stop polling")
}
}), 2000)
function startPolling(id){
return callApi('/someUrl/'+id+'','get') // it returns a promise
}
问题:如果在调用startPolling
未使用bind
,则setInterval
不会每2秒执行一次代码。
如果我在调用startPolling
setInterval时使用bind
正在执行它的方式,但是then()
未执行,因为我遇到了上述错误
startPolling.bind
返回一个新函数,该函数在调用时将调用startPolling
,而后者又将返回一个startPolling
。 如果需要的话,必须是startPolling.bind(null, id)().then
……这显然是胡说八道。
您不能在这里bind
。 您以后不能调用函数,而是立即在其返回值上访问属性。 使用回调包装器:
setInterval(function () {
startPolling(id).then(...)
}, 2000);
为了能够更彻底地回答您的问题,我需要进行更多调试,例如,在startPolling
上使用console.log。 要测试这种情况:如果删除.bind
,startPolling仍会触发,但可能会给出错误(您当前未捕获),因此无法启动间隔?
我编程在一个间隔中轮询异步函数的方法如下:
public startIntervalPolling(id, intervalDuration=2000) {
var intervalVariable = setInterval(
startPolling(id).then((response) => {
console.log("Polling response", response);
if (response.id == 0) {
clearInterval(intervalVariable);
}
}, (pollingError) => {
console.error("Error while polling", pollingError)
}), intervalDuration);
}
尚未测试过,但是希望它可以帮助您朝正确的方向发展。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.