Javascript 将变量传递给nodejs函数
我有一个简单的nodejs函数,它的工作原理如下:Javascript 将变量传递给nodejs函数,javascript,arrays,node.js,get,Javascript,Arrays,Node.js,Get,我有一个简单的nodejs函数,它的工作原理如下: 向URL列表发出GET请求 正在收集对数组的所有响应 逐行打印回复 问题是,我在函数开始时初始化了results数组,在函数中间我将响应字符串推送到这个数组,但在最后这个数组是空的 var http = require('http'); var bl = require('bl'); var argv = process.argv; var results = []; for (i = 2; i < argv.length; i
var http = require('http');
var bl = require('bl');
var argv = process.argv;
var results = [];
for (i = 2; i < argv.length; i++) {
var url = argv[i].toString();
http.get(url, function (response) {
response.pipe(bl(function (err, data) {
results.push(data.toString()); //if im just printing the data it shows the correct info.
}))
})
}
console.log(results);
var http=require('http');
var bl=需要('bl');
var argv=process.argv;
var结果=[];
对于(i=2;i
所以响应只是“[]”正如注释中指出的,http.get是异步工作的。因此,您必须处理它的事件来填充数组,并等待所有事件完成后打印出结果 您可以以此为例(不使用bl):
var http=require('http');
var argv=process.argv;
var结果=[];
对于(i=2;i
希望有帮助。这里http.get正在异步工作。所以试试看
var http=require('http');
var bl=需要('bl');
var argv=process.argv;
var延期=要求(“承诺”)。延期;
var deferred=deferred();
var结果=[];
对于(i=2;i
这对我很有用。谢谢你们的回复,他们都在工作,但我发现答案是“bl”
var http=require('http');
var bl=需要('bl');
var argv=process.argv;
var结果=[]
函数printResults(){
对于(变量i=2;i
http.get的可能副本正在异步工作。您在收到结果之前就记录了结果。但我收集的是所有响应,但顺序是随机的,不是吗?
var http = require('http');
var argv = process.argv;
var results = [];
for (i = 2; i < argv.length; i++) {
var url = argv[i].toString();
http.get(url, function (response) {
var res = '';
response.setEncoding('utf8');
response.on('data', function (data) {// Collect data.
res += data;
});
response.on('end', function () {// Response's finished, print out array if we have collected all the requests.
results.push(res);
if (results.length === argv.length - 2) {
console.log(results);
}
});
response.on('error', console.log);
});
}
//console.log(results);// This is not correct as it'll print out an empty array due to the asynchrous nature of http.get
var http = require('http');
var bl = require('bl');
var argv = process.argv;
var defer = require("promise").defer;
var deferred = defer();
var results = [];
for (i = 2; i < argv.length; i++) {
var url = argv[i].toString();
http.get(url, function (response) {
response.pipe(bl(function (err, data) {
results.push(data.toString()); //if im just printing the data it shows the correct info.
}));
deferred.resolve("succesful result");
});
}
deferred.promise.then(function(result){
console.log(results);
},
function(error){
//... executed when the promise fails
});
var http = require('http');
var bl = require('bl');
var argv = process.argv;
var results = []
function printResults() {
for (var i = 2; i < argv.length; i++)
console.log(results[i])
}
for (i = 2; i < argv.length; i++) {
var url = argv[i].toString();
http.get(url, function (responce) {
responce.pipe(bl(function (err, data) {
results[i] = data.toString()
if (count == 3) {
printResults()
}
}))
})
}