【发布时间】:2014-12-05 12:06:08
【问题描述】:
问题:这是 node.js 的 learnyounode 模块 JugglingAsync 中的问题。 "这个问题和上一个问题 (HTTP COLLECT) 一样,需要使用 http.get()。不过,这次会提供三个 URL 作为前三个命令行参数。
您必须收集每个 URL 提供给您的完整内容并将其打印到控制台 (stdout)。您不需要打印出长度,只需将数据作为字符串;每个 URL 一行。问题是您必须以与作为命令提供给您的 URL 相同的顺序打印它们 行参数。”
我尝试使用 node.js stream.readable 类将响应从第一个 URL 传递到第二个,并将响应从该 URL 传递到第三个。我期待这将同步运行,即当第一个请求完成时,第二个请求将通过管道传输。我正在使用包 bl (https://www.npmjs.org/package/bl) 来收集获取请求的所有响应数据。 下面的代码片段:
var https = require('http');
var bl = require('bl');
var finalString = '';
https.get( process.argv[2], function(response)
{
response.setEncoding('utf8');
response.pipe(bl(function (err, data)
{
console.log("First request called");
if (err) return console.error(err);
console.log(data.toString());
})).pipe(bl(function(err, data)
{
console.log("Second Request called");
https.get (process.argv[3], function( response)
{
response.setEncoding('utf8');
response.pipe(bl( function (err, data)
{
if (err) return console.error(err);
console.log(data.toString());
}))
}).on('error', function(err)
{
console.log(err);
})
})).pipe( bl(function(err,data)
{
console.log("Third request called");
https.get (process.argv[4], function( response)
{
response.setEncoding('utf8');
response.pipe(bl( function (err, data)
{
if (err) return console.error(err);
console.log(data.toString());
}))
}).on('error', function(err)
{
console.log(err);
})
})
)
}).on('error', function (err)
{
console.log(err);
}
);
输出不遵循请求的顺序。我做错了什么?
【问题讨论】:
标签: javascript node.js