2016-02-26 127 views
0

我有一个用例,我需要使用for循环,webservice回调,超时一起,然后我发现超时似乎不工作,这里是代码:for循环,回调,超时一起,超时似乎不起作用

function handler5Min(i){ 
      if (i < sites.length){ 
       var site5MinPath = '/v3/sites/' + sites[i].siteid + '/data?fields=Wh_sum&tz=US/Pacific&gran=daily'; 
       var end = moment().format('YYYY-MM-DDThh:mm:ss'); 
       var start = moment().subtract(2, 'days').format('YYYY-MM-DDThh:mm:ss'); 
       site5MinPath = site5MinPath + '&start=' + start + '&end=' + end; 

       var options = locusUtil.setOptions(site5MinPath, globalToken.token.access_token); 
       request(options, function(err, result, body){ 
        if (err){ 
         log.error(err + ' path: ' + site5MinPath); 
        } 
        if (body){ 
         var data = JSON.parse(body).data; 
         log.info('5 min data: ' + JSON.stringify(body, null, 4)); 
         setTimeout(handler5Min(i+1), 5000); 
        } 
       }) 
      } 
      else{ 

      } 
     } 
     handler5Min(0); 

请求发出一个Web服务请求时,我需要等待,直到获得响应,那么我移动到下一个站点[]项目进行下一个电话,而且还对API提供商限制的要求为每秒2张,所以我在那里有一个setTimeout,但似乎没有发生超时。

+1

你必须通过一个函数来'setTimeout'。你的*电话*不会产生一个。使用函数表达式。 – Bergi

+0

这是真的,我的一个愚蠢的错误,我认为直接调用函数是一样的东西 – Jie

回答

1

而不是做

setTimeout(handler5Min(i+1), 5000); 

做的

setTimeout(handler5Min, 5000, i + 1); 
+0

少即是多。 +1 – traktor53