Javascript Can';t从响应的结束事件中递归调用Http.Request
我想发出一个HTTP GET请求,然后在最后一个请求完成后立即触发另一个请求。每个请求几乎相同(对路径的微小更改) 我很难理解以下内容不起作用的原因(简化版): 我知道有很多库等用于对异步代码进行排序,但我真的很想理解为什么我不能用这种方式实现异步循环。Javascript Can';t从响应的结束事件中递归调用Http.Request,javascript,node.js,asynchronous,recursion,Javascript,Node.js,Asynchronous,Recursion,我想发出一个HTTP GET请求,然后在最后一个请求完成后立即触发另一个请求。每个请求几乎相同(对路径的微小更改) 我很难理解以下内容不起作用的原因(简化版): 我知道有很多库等用于对异步代码进行排序,但我真的很想理解为什么我不能用这种方式实现异步循环。req.end()完成请求。直到您完成请求,才会开始响应。因此req.end()内部res.on('end',function(){})没有任何意义 如果要使用其他路径发出另一个请求,可以执行以下操作: var http = require('h
req.end()
完成请求。直到您完成请求,才会开始响应。因此req.end()
内部res.on('end',function(){})
没有任何意义
如果要使用其他路径发出另一个请求,可以执行以下操作:
var http = require('http');
var options = { ... } // host, port etc
makeRequest(options, function() {
db.insert(data);
options.path = somewhat_new_path;
makeRequest(options, function() { //this will make a recursive synchronous call
db.insert(data);
});
});
options.path = another_path;
makeRequest(options, function() { //this will make a asynchronous call
db.insert(data);
});
var makeRequest = function(options, callback) {
http.request(options, function(res) {
res.on('data', function(chunk) {
data+=chunk;
});
res.on('end', callback);
}).end();
}
你想知道为什么
req.end()
insideres.on
不起作用?我知道req.end()完成了请求,但我首先在外部调用它-因此请求被触发。然后,当响应的结束事件被触发时,我只想再次调用它。你能更详细地解释一下为什么那不起作用吗?@DanielC是的,它是在外面触发的。但同一请求不能触发两次。您必须发出另一个http.request
。好的。谢谢现在我明白了,我必须将它包装在一个函数中,并将其作为回调传递。
var http = require('http');
var options = { ... } // host, port etc
makeRequest(options, function() {
db.insert(data);
options.path = somewhat_new_path;
makeRequest(options, function() { //this will make a recursive synchronous call
db.insert(data);
});
});
options.path = another_path;
makeRequest(options, function() { //this will make a asynchronous call
db.insert(data);
});
var makeRequest = function(options, callback) {
http.request(options, function(res) {
res.on('data', function(chunk) {
data+=chunk;
});
res.on('end', callback);
}).end();
}