Node.js Http Get in节点的异步使用
对于url列表中的每个url,我尝试在请求后将该url的字符串响应推送到数组中。这基本上将URL列表映射到它们的内容。问题是,结果列表的顺序必须与URL的顺序相同。这是从一本书中摘取的 我不明白为什么我的解决方案不起作用。据我所知,它应该把事情安排得井井有条。但它没有通过测试Node.js Http Get in节点的异步使用,node.js,http,asynchronous,Node.js,Http,Asynchronous,对于url列表中的每个url,我尝试在请求后将该url的字符串响应推送到数组中。这基本上将URL列表映射到它们的内容。问题是,结果列表的顺序必须与URL的顺序相同。这是从一本书中摘取的 我不明白为什么我的解决方案不起作用。据我所知,它应该把事情安排得井井有条。但它没有通过测试 var http = require('http') var urls = process.argv.slice(2, process.argv.length) var result = Array(3) urls.fo
var http = require('http')
var urls = process.argv.slice(2, process.argv.length)
var result = Array(3)
urls.forEach((url, ind) => {
var str = ''
http.get(url, response => {
response.on('data', d => {
str+=d.toString()
})
response.on('end', () => {
result[ind] = str
})
if (result.every(val => {return val.length!==0})){
result.forEach(s => {console.log(s)})
}
})
})
以下是工作料斗的测试结果:
你得到了什么结果?你期望得到什么?@devius我在问题中添加了测试结果我不是javascript专家,但你确定你在http.get中设置的回调是同步的吗?因为http.get定义为异步,因为它是httprequest@An-droid不,它不是同步的,这就是为什么我在
URL
的相应索引处将响应分配给result
数组,而不是简单地将其推送到URL
它们不是特殊的库。util.promisify和Promise是内置的。你是说result[ind]没有将响应放入正确的索引中吗很可能是这样,但您无法检查它是否为真,因为结果。每个都位于错误的位置。尝试将其置于结束
回调。另一个问题是,every
不会迭代稀疏(未分配)数组元素。它应该是result=Array(3)。填充(未定义)
以使其正常工作。