以下是我的代码,我收到此错误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
}
问题:
如果我在调用bind
时未使用startPolling
,则setInterval
不会每2秒执行一次代码。
如果我在调用bind
时使用startPolling
,则setInterval正在执行它的方式,但then()
未执行,因为我收到了上述错误
答案 0 :(得分:1)
startPolling.bind
返回一个新函数,当调用它时会调用startPolling
,而startPolling.bind(null, id)().then
将返回一个promise。如果有什么需要bind
......这显然是无稽之谈。
你不能setInterval(function () {
startPolling(id).then(...)
}, 2000);
在这里。您以后无法调用函数,但会立即访问其返回值的属性。使用回调包装器:
clickContent
答案 1 :(得分:0)
为了能够更彻底地回答您的问题,我需要更多调试,例如您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);
}
尚未测试过,但希望这可以帮助您朝着正确的方向前进。