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可以順序的回應了∼