繁体   English   中英

.then()在传递参数时在setInterval函数中不起作用?

[英].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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM