我一直试图让这个工作
var http = require('http'),
parseString = require ('xml2js').parseString;
for (var noOfZones = 1; noOfZones<=8; noOfZones++) {
var newPath = 'http://192.168.1.200/getZoneData?zone='+noOfZones;
var req = http.request(newPath, function(zres, noOfZones) {
zres.setEncoding('utf8');
zres.on('data', function (zonedata) {
parseString(zonedata, {
trim:true,
childkey:9,
explicitArray:false,
explicitChildren:false
}, function (err, zones) {
console.log(noOfZones);//this one bring back undefined
});
});
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message)
})
req.end();
}
for循环可以将noOfZones传递给newPath。但是该值未在函数内传递(错误,区域) 我一直在阅读将变量传递给内联函数并试图将它放在各个级别,但它似乎并不适合我。所有我回来的都是未定义的。 (即使我将其字符串化)
答案 0 :(得分:0)
是什么让您认为request
会将其他参数传递给您的回调?
您可以执行以下操作:
var http = require('http'),
parseString = require ('xml2js').parseString;
Array.apply(null, new Array(8)).forEach(function(_, i) { //make iterable array
var noOfZones = i + 1; //define scope variable
var newPath = 'http://192.168.1.200/getZoneData?zone='+noOfZones;
var req = http.request(newPath, function(zres) {
zres.setEncoding('utf8');
zres.on('data', function (zonedata) {
parseString(zonedata, {
trim:true,
childkey:9,
explicitArray:false,
explicitChildren:false
}, function (err, zones) {
console.log(noOfZones); //access it
});
});
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message)
})
req.end();
});
答案 1 :(得分:-1)
如果你在循环声明中的noOfZones之前删除了“var”,那么应该有效。
所以for (noOfZones = 1; noOfZones<=8; noOfZones++)
代替for (var noOfZones = 1; noOfZones<=8; noOfZones++)
。