Exception when for loop request

下面是一個簡單的node.js http request來抓取某個url的值
對象url也是用node.js (expressjs)建立的restful web
但是實驗發現在while loop之下有一些request會傳不回值

var request = require('request');
while(true) {
  request('http://xxx.xxx.xxx.xxx:3000/xxx', function(err, response, body) {
    if(!err) 
      console.log(body);
    else 
      console.log(JSON.stringify(err));
  });
}

仔細觀察對象web server的回應
發現應該是web server在瞬間接收到一個以上request時候
server會忽略掉太相近的request...
在沒有比較好的解法之前,可以這樣做:

var request = require('request');
var i = 0; 
while(true) {
  i++; 
  setTimeout(function(){ //透過setTimeout來延遲request之間的時間
  request('http://xxx.xxx.xxx.xxx:3000/xxx', function(err, response, body) {
    if(!err) 
      console.log(body);
    else 
      console.log(JSON.stringify(err));
  });
  }, 100*i ); 
}

透過setTimeout來延長while loop所觸發的非同步http request
這樣就可以讓對象web server可以順序的回應了∼

這個網誌中的熱門文章

Bash判斷參數是否存在

使用 minikube 輕鬆上手 kubernetes