【发布时间】:2016-09-06 03:18:37
【问题描述】:
我正在尝试将 API 调用发送到 NodeJS 服务器。不幸的是,服务器(不是我制作的)不允许我进行异步调用。
我正在尝试找出一种方法,让每个请求都等待前一个请求完成后再发送。
这是我的代码:
var http = require('http');
var fs = require('fs');
// An object of options to indicate where to post to
var post_options = {
host: 'localhost',
port: '8080',
path: '/api/scan',
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
};
var array = ["ssl.com", "google.com", "hamzakhan.org"];
for (var i=0; i<array.length;i++) {
//console.log(array[i]);
var post_req = http.request(post_options, function(res) {
res.setEncoding('utf8');
var body = '';
res.on('data', function(chunk) {
body += chunk;
});
res.on('end', function() {
body = JSON.parse(body);
// Make sure it's working
console.log(body.response.subject);
});
});
var url = array[i];
var catURL = { "url": url, "path": "/", "port": "443", "live_scan": "false", "advanced": "true" };
post_req.write(JSON.stringify(catURL), function(err) {
//console.log(err);
post_req.end();
});
}
我在想我可以在 for 循环中嵌套一个 while 循环,而 while 循环会有一个标志来指示 for 循环何时可以继续进行。
现在,当我将 url 的值硬编码为单个 url 时,此代码有效,因此我知道我成功发送和接收。
感谢所有/任何帮助!
【问题讨论】:
-
而不是循环通过您的
array变量,例如,您可以从它的第一个元素开始,然后在您的res.on('end',function() { ... /* callback here */ ... })中放置一个回调来告诉您的程序每次都开始一个新请求响应结束,直到不再有请求发送。你怎么看? -
我如何开始一个新的请求?
-
请参见下面基于您的代码的示例。请注意,我没有测试该示例。我只是添加了几行来说明我的建议。
标签: javascript node.js api rest asynchronous