- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
第一次发帖,但感谢大家提供的所有信息!
关于这个问题。我有一些代码,我在其中尝试遍历 JSON 文件并对数组中的每个对象执行 HTTP Get 请求。问题似乎在于,当我执行 http get 请求时,它没有按顺序执行也没有完成。在对我的 API 进行了大约 6-9 次调用后,它挂断了。
示例 JSON:
[
{
"Name": "ActClgStpt",
"Address": 326,
"Slot": 1
},
{
"Name": "ActHtgStpt",
"Address": 324,
"Slot": 1
},
{
"Name": "AdvanceCool",
"Address": 21,
"Slot": 1
}
]
遍历 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")})
}
}
我在 API 调用的每个循环中执行的函数的副本。我有一个回调设置,但我认为我可能没有正确设置它:
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()
}
});
}
我的控制台日志示例挂起:
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
任何您认为我可以在代码中改进的地方都很棒。仍然每天都在 Node 上学习!
最佳答案
根据 Anand S,看起来非 200 的人会绞死你。更改此代码:
console.log(isoTime + " " +pointname + " " + slotvalue);
callback()
}
进入这个:
console.log(isoTime + " " +pointname + " " + slotvalue);
}
callback()
而且你应该停止悬挂。
至于乱序,request.get()
调用只是排队一个请求,并没有真正发出请求。这必须等待事件循环再次启动,直到调用函数返回才会发生。到那时,可能还有另一个 request.get()
也在排队,可能会先于它(或者更准确地说,可能会在前一个之前调用它的回调)。
我通常通过拥有一个数组来处理订单问题,每个回调都将写入该数组(具有唯一索引)。虽然效率较低,但您也可以使用 async
系列类型的函数来对请求进行排序。
关于javascript - NodeJS HTTP请求未按顺序执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34595906/
据我了解,HTTP POST 请求的正文大小没有限制。因此,客户端可能会在一个 HTTP 请求中发送 千兆字节 的数据。现在我想知道 HTTP 服务器应该如何处理此类请求。 Tomcat 和 Jett
在了解Web Deploy我遇到了一些讨论 http://+:80 和 http://*:80 的 netsh.exe 命令。这些是什么意思? 最佳答案 引自URLPrefix Strings (Wi
假设我有一个负载均衡器,然后是 2 个 Web 服务器,然后是一个负载均衡器,然后是 4 个应用程序服务器。 HTTP 响应是否遵循与 HTTP 请求服务相同的路径? 最佳答案 按路径,我假设您是网络
我有一个带有 uri /api/books/122 的资源,如果在客户端为此资源发送 HTTP Delete 时该资源不存在,那么相应的响应代码是什么这个 Action ?是不是404 Not Fou
是否有特定的(或约定的)HTTP 响应消息(或除断开连接之外的其他操作)来阐明服务器不接受 pipelined HTTP requests ? 我正在寻找能让客户端停止流水线化它的请求并分别发送每个请
在了解Web Deploy我遇到了一些讨论 http://+:80 和 http://*:80 的 netsh.exe 命令。这些是什么意思? 最佳答案 引自URLPrefix Strings (Wi
我有一个带有 uri /api/books/122 的资源,如果在客户端为此资源发送 HTTP Delete 时该资源不存在,那么相应的响应代码是什么这个 Action ?是不是404 Not Fou
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
我使用 Mule 作为 REST API AMQP。我必须发送自定义请求方法:“PRINT”,但我收到: Status Code: 400 Bad Request The request could
我需要针对具有不同 HTTP 响应代码的 URL 测试我的脚本。我如何获取响应代码 300、303 或 307 等的示例/示例现有 URL? 谢谢! 最佳答案 您可以使用 httpbin为此目的。 例
我正在尝试编写一个程序来匹配 HTTP 请求及其相应的响应。似乎在大多数情况下一切都运行良好(当传输完全有序时,即使不是,通过使用 TCP 序列号)。 我发现的唯一问题是当我有流水线请求时。在那之后,
RESTful Web Services鼓励使用 HTTP 303将客户端重定向到资源的规范表示。它仅在 HTTP GET 的上下文中讨论主题。 这是否也适用于其他 HTTP 方法?如果客户端尝试对非
当使用chunked HTTP传输编码时,为什么服务器需要同时写出chunk的字节大小并且后续的chunk数据以CRLF结尾? 这不会使发送二进制数据“CRLF-unclean”和方法有点多余吗? 如
这个问题在这里已经有了答案: Is it acceptable for a server to send a HTTP response before the entire request has
如果我向同一台服务器发出多个 HTTP Get 请求并收到每个请求的 HTTP 200 OK 响应,我如何使用 Wireshark 判断哪个请求映射到哪个响应? 目前看起来像是发出了一个 http 请
func main() { http.HandleFunc("/", handler) } func handler(w http.ResponseWriter, r http.Request
我找不到有值(value)的 NodeJS with Typescript 教程,所以我在无指导下潜入水中,果然我有一个问题。 我不明白这两行之间的区别: import * as http from
问一个关于Are HTTP headers case-sensitive?的问题,如果 HTTP 方法区分大小写,大多数服务器如何处理“get”或“post”与“GET”或“POST”? 例如,看起来
我正在使用ASP.NET,在其中我通过动词GET接收查询,该应用程序专用于该URL。 该代码有效,但是如果用户发送的密码使http 200无效,请回答我,并在消息的正文中显示“Fail user or
Closed. This question needs details or clarity。它当前不接受答案。 想改善这个问题吗?添加详细信息,并通过editing this post阐明问题。 9
我是一名优秀的程序员,十分优秀!