我正在做 nodeschool 练习,
这个问题和前面的问题(HTTP COLLECT)一样,都需要用到http.get()。但是,这次您将获得三个 URL 作为前三个命令行参数。
您必须收集每个 URL 提供给您的完整内容,并将其打印到控制台 (stdout)。您不需要打印出长度,只需打印出字符串形式的数据即可;每个 URL 一行。问题是您必须按照与作为命令行参数提供给您的 URL 相同的顺序打印它们。
换句话说,我要注册 3 个 http.get 请求,并按顺序打印从中收到的数据。
我正在尝试使用 promises = 另一个获取请求不会被调用,直到第一个请求没有结束。
我的代码看起来像这样
var http=require("http");
var collect=[];
var dat=[];
for( var i = 2 ; i < process.argv.length;i++){
collect.push(process.argv[i]);
}
function chainIt(array,callback){
return array.reduce(function(promise,item){
return promise.then(function(){
return callback(item)
})
},Promise.resolve())
}
function getIt(item){
return http.get(item,function(response){
response.on("data",function(data){
dat.push(data);
})
})
}
chainIt(collett,function(item){
return getIt(item)
})
}).then(function(){
collect.forEach(function(x){
console.log(x);
})
})
但我实际上没有打印任何数据 = 我没有通过练习。
我在这里没有看到任何错误,但我只是从承诺和节点开始。错误在哪里?
原文由 Johnyb 发布,翻译遵循 CC BY-SA 4.0 许可协议
出于教育目的,我最近为
http
和https
模块编写了一个包装器,该模块使用原生Promise
s。也就是说,我建议使用一个库,例如request
;这使事情变得更简单,具有单元测试覆盖率,由开源社区维护。此外,我的包装器对响应块进行了简单的字符串连接,我不认为这是构建响应主体的最佳方式。仅供参考:这需要 Node.js 4 或更高版本,尽管方法在 Node 0.xx 中几乎相同
编辑: 我才刚刚意识到你是
Promise
的新手。以下是如何使用此包装器的示例: