【发布时间】:2020-05-31 23:02:01
【问题描述】:
当出现第 9 步时,我正在学习本教程。
这个问题和上一个问题(HTTP COLLECT)一样,需要使用http.get()。但是,这一次将为您提供三个 URL 作为前三个命令行参数。
您必须收集每个 URL 提供给您的完整内容并将其打印到控制台 (stdout)。您不需要打印出长度,只需将数据打印为字符串即可;每个 URL 一行。问题是您必须按照作为命令行参数提供给您的 URL 的顺序打印它们。
我的代码是(它不能在他喜欢的时候正常工作):
http = require("http");
var url = [process.argv[2], process.argv[3], process.argv[4]];
var responses = [];
var completed_responses = 0;
for(var i in url){
http.get(url[i], function(response){
var content = "";
//if(completed_responses == url.length){
response.setEncoding("utf-8");
response.on("data", function(data){
content += data;
})
response.on("error", console.error);
response.on("end", function(end){
console.log(content);
});
})
}
答案是:
var http = require("http");
var bl = require("bl");
var results = [];
var count = 0;
function printResults(){
for(var i = 0; i < 3; i++)
console.log(results[i]);
}
function httpGet(index){
http.get(process.argv[2 + index], function(response){
response.pipe(bl(function(err, data){
if (err)
return console.error(err);
results[index] = data.toString();
count++;
if(count == 3)
printResults()
}))
})
}
for(var i = 0; i < 3; i++)
httpGet(i);
没有 BL/AFTER/ETC 的正确答案是什么?
谢谢大家!
【问题讨论】:
-
什么是 BL/Async/After/BL/AFTER/ETC?
-
@Bergi Node.JS 第三方库。示例:BufferList 编辑:用于同步异步事物。
标签: javascript node.js http asynchronous get