Pierwszy wpis, ale dziękuję wszystkim za wszystkie informacje!Żądania HTTP NodeJS nie są wykonywane w kolejności
Dalej problem. Mam pewien kod, w którym próbuję iterować nad plikiem JSON i wykonać żądanie HTTP Get Request na każdym obiekcie w tablicy. Wydaje się, że problem pojawia się w tym, że podczas wykonywania żądania HTTP get nie robi tego w kolejności ani nie jest kompletny. Rozłącza się po około 6-9 wywołaniach mojego API.
Próbka JSON:
[
{
"Name": "ActClgStpt",
"Address": 326,
"Slot": 1
},
{
"Name": "ActHtgStpt",
"Address": 324,
"Slot": 1
},
{
"Name": "AdvanceCool",
"Address": 21,
"Slot": 1
}
]
Iteracja nad JSON:
sedona.jsonInputAddress('Unit1GWRenton', logMe);
function logMe() {
for(var i in config)
{
var name = config[i].Name;
var address = config[i].Address;
var slot = config[i].Slot;
console.log(name + " " + address + " " + slot);
sedona.collectValues("192.168.101.14", 2001, config[i].Name, config[i].Address, config[i].Slot,function(){console.log("Done")})
}
}
Kopia funkcją Mam nakaz na każdej pętli do wywołania API. Mam zwrotna ustawiona, ale nie sądzę, abym Ustawiono prawidłowo:
collectValues:function(site,port,name,address,slot,callback){
/* Build Scrape Constructor */
var url = 'http://' + (site) + ':' + (port) + '/twave/app/' + (address);
/* Slice out Unit # */
unitNumber = port.toString().slice(2, 4);
/* Create slotid */
var slotmaker = "slot" + (slot);
/* Get ISO Timestamp */
var dt = new Date();
var isoDate = dt.toISOString();
isoTime = isoDate.slice(0,19).replace('T', ' ').concat('.000000+00:00');
/* Make API Call */
request.get({
agent: false,
url: url,
json: true
}, function response (error, response, body) {
if (!error && response.statusCode === 200) {
// Grab Point Name
pointname = name;
// Grab Point Value
var value = body.slots;
var slot = value[slotmaker];
slotvalue = slot.value;
// Testing Logs
console.log(isoTime + " " +pointname + " " + slotvalue);
callback()
}
});
}
próbki mojego dziennika konsoli gdzie odkłada:
ActClgStpt 326 1
ActHtgStpt 324 1
AdvanceCool 21 1
AdvanceDewEnable 462 1
CO2Sensor 455 1
CO2Stpt 257 1
CTRange 14 6
ComfortStatus 328 1
CompAllow 167 1
Cool1Spd 83 1
Cool2Spd 84 1
CoolCall1 314 2
CoolCall2 315 2
CoolCmd1 109 1
CoolCmd2 110 1
DCVMaxVolume 260 2
DCVResponse 502 2
SaTemp 423 1
DaTempLimit 193 2
Damper 387 1
DriveFaultCode 123 4
ESMEconMin 175 1
ESMMode 8 1
EconDewEnable 464 1
EconMode 96 1
EconTest 496 1
FanCall 78 1
FanPower 491 1
FanSpeed 492 1
FanStatus 135 1
FullSpd 38 1
Heat1Spd 31 1
Heat2Spd 32 1
HeatCall1 316 2
HeatCall2 317 2
HeatCmd1 69 1
HeatCmd2 70 1
HighAlarmStpt 62 1
HighAlertStpt 61 1
LowAlarmStpt 59 1
LowAlertStpt 58 1
OSAVolume 493 1
OaTemp 457 1
OccClgStpt 247 1
OccHtgStpt 246 1
Occupied 313 1
OptimumStartCommand 233 1
OverrideTime 348 1
PBStatus 221 1
PowerExCmd 107 1
PowerExStpt 188 1
RaTemp 456 1
ResetDrive 212 1
ServiceSwitch 361 5
SoftSwitch 310 4
SpaceTemp 490 1
StdEconMin 176 1
StdEconStpt 307 1
StptAdj 291 1
StptAdjRange 269 1
UnitAmps 454 1
UnitHealth 276 2
UnoccClgStpt 268 1
UnoccHtgStpt 258 1
VentMode 400 2
VentSpd 30 1
2016-01-04 16:40:15.000000+00:00 ActClgStpt 73.000000
Done
2016-01-04 16:40:15.000000+00:00 UnitAmps 5.406000
Done
2016-01-04 16:40:15.000000+00:00 CoolCmd2 false
Done
2016-01-04 16:40:15.000000+00:00 ActHtgStpt 68.000000
Done
Cokolwiek myślisz mogę poprawić w kodzie, który byłby świetny ... Wciąż uczę się codziennie na Node!
Co masz na myśli zawieszenie? –
Kod zostanie wykonany, a następnie zatrzyma się na ostatniej iteracji w moim dzienniku konsoli. Podczas działania w IDE programu WebStorm widzę, że skrypt działa, ale dane wyjściowe są zatrzymywane po ostatnim znaku "Gotowe". –
możliwe powielanie http://stackoverflow.com/questions/19739945/node-http-requests-s-executing-out-of-order-cousing-problems-with-an-api-using –