2017-08-04 112 views
0

下面是我的代码,我得到这个错误Unhandled Rejection (TypeError): startPolling.bind(...).then is not a function.then()不能在setInterval函数中传递参数?

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

startPolling.bind(...)。然后不是一个函数它是一个承诺 – marvel308

+0

如果它是一个承诺那么为什么我得到这个错误'未处理的拒绝(TypeError):startPolling.bind(...)。那么不是一个函数' – ashwintastic

+0

你通过在setInterval()之外运行它会得到什么?尝试运行它并在链中添加一个catch并检查err – marvel308

回答

1

startPolling.bind返回,要求将调用startPolling当新的功能,这在转向将返回一个承诺。如果有什么需要是startPolling.bind(null, id)().then ......这显然是无稽之谈。

你不能bind在这里。您以后不能调用函数,而是立即访问其返回值的属性。使用回调包装:

setInterval(function() { 
    startPolling(id).then(...) 
}, 2000); 
0

为了能够更彻底地回答您的问题,我需要更多的调试, console.log您的startPolling。测试场景:如果删除.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); 
    } 

没有测试过,但希望这可以帮助您在正确的方向。