【发布时间】:2013-12-28 10:38:08
【问题描述】:
所以,我有一个包含一些值的数组。我想将这些值发送到 www.example.com。每个请求我只需要发送一个值。
我在 node.js 中使用这个任务 http.request:
var myArr = [1,2,3,4,5,6,7,8,9,10,11,12];
function requestSender(data, callback)
{
var post = querystring.stringify({
data: data
});
var options = {
hostname: 'www.example.com',
port: 80,
path: '/upload',
method: 'POST'
};
var req = https.request(options, function(res)
{
res.setEncoding('utf-8');
res.on('data', function(data)
{
callback();
});
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
});
req.write(post);
req.end();
}
为了逐个发送请求,我使用的是函数,它接受一组函数并递归地将下一个函数作为回调添加到上一个:
function stack(arr)
{
var newArr = arr.slice(1);
arr[0](function()
{
if (typeof newArr[0] == 'function') stack(newArr);
});
}
为了将所有这些人员合二为一,我使用以下代码:
var functionsArr = [];
for (i in myArr)
{
functionsArr.push(function(callback)
{
var value = myArr[i];
requestSender(value, callback);
});
};
stack(functionsArr);
但实际上,这是行不通的:所有请求都在 1 毫秒内发送,然后在收到响应时回调正在侦听。但它不应该!我已将 callback() 放在 http.request(options, callback) 中!!它是怎么发生的?
所以我的问题是: 1)如何在node.js中严格地一一发送http请求? 2) 为什么我的解决方案不起作用?
【问题讨论】:
-
“严格一个一个”是什么意思?我认为这意味着您不想在第一个完成之前开始一个新的-但随后您还写了“尽可能快”-对我而言,这表明您确实想一次将它们全部发送,因为这将尽可能快。您能否编辑/澄清您的代码未按预期工作的方式。
-
你得到了我想要的“严格一个一个”的意思。 “尽可能快”意味着不使用 setTimeout() 或类似的东西。但你是对的,我最好从帖子中删除“尽可能快”的东西
标签: javascript node.js stack