我是Node.js的新手。
我通过Node.js从其他服务器获取数据:
function get_data(data_url, a, callback) {
console.log('dataurl = ' + data_url);
rem_url = url.parse(data_url);
console.log('hostname = ' + rem_url.hostname);
console.log('host = ' + rem_url.host);
console.log('path = ' + rem_url.path);
options = {
hostname: rem_url.hostname,
path: rem_url.path,
keepAlive: true
};
request = http.request(options, function (res) {
data = '';
res.on('data', function (chunk) {
data = data + chunk;
sleep(20);
});
res.on('end', function () {
callback(a, data);
});
res.on('error', function (err) {
console.log("Error Occurred: " + err.message);
});
});
request.on('error', function (e) {
console.log('dataurl = ' + data_url);
console.log('a = ' + a);
console.log('problem with request: ' + e.message);
});
request.end();
}
我收到数据损坏,所以我插入了一个睡眠功能:
res.on('data', function (chunk) {
data = data + chunk;
sleep(20);
});
我仍然想知道是否有更好的方法? 非常感谢你!
注意:这是我的睡眠功能:
function sleep(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > milliseconds){
break;
}
}
}
更多详情:
答案 0 :(得分:1)
在阅读您的代码时,我注意到即使有相同的评论,
你需要在函数内设置数据而不是在外面。
所以它成为局部变量。
在您的函数数据变量是全局的。
因为sleep()函数可以获得更好的效果; javascript需要一些时间来覆盖全局数据。这解释了为什么你会得到更好的结果。
只需这样写,然后从js文件的上一行删除var data;
。
var data = '';
res.on('data', function (chunk) {
data = data + chunk;
});