Node.js Http Get in节点的异步使用

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

对于url列表中的每个url,我尝试在请求后将该url的字符串响应推送到数组中。这基本上将URL列表映射到它们的内容。问题是,结果列表的顺序必须与URL的顺序相同。这是从一本书中摘取的

我不明白为什么我的解决方案不起作用。据我所知,它应该把事情安排得井井有条。但它没有通过测试

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)})
        }

    })


})
以下是工作料斗的测试结果:

  • 事实:“她说得对,他有一个巨大的吉拉鲁。像一个像辣妹一样的埃斯基火烈鸟一样忙碌。”
  • 期待:“你这个小开膛手,在岩石上乱搞,从蓬奇·博特洛来的特伦特。像一个傻瓜一样狡猾。没有戏剧,让我们找个女朋友。让我们找个女朋友。” 一些杜瑞,当它像一个怪人一样的时候。”

  • 真实版:“你这个小开膛手,在岩石上乱搞,从蓬奇·博特洛来的特伦特。像一个傻瓜一样狡猾。没有戏剧,让我们找些女朋友。让我们找个女朋友 一些杜瑞,当它像一个怪人一样的时候。”

  • 期待:“她会对他有一个巨大的jillaroo,像一个像辣妹一样的esky火烈鸟一样忙碌。”

  • 事实:“她说得对,他有一个巨大的吉拉鲁。像一个像辣妹一样的埃斯基火烈鸟一样忙碌。”

  • 期待:“我们不去看戏剧,从蓬奇的圣诞节堆特伦特。像一个铁人伙伴一样忙碌,像一个东西一样突出。像一个干巴巴的 作为一种乳霜,它像一个流氓一样脱颖而出。小心老鼠袋 吃了一顿丰盛的午餐,沙扎和特伦特在岩石上给我们弄了些沙沙 从蓬奇扔下来。”

  • 实际:“”

  • 预期:“”

  • 你得到了什么结果?你期望得到什么?@devius我在问题中添加了测试结果我不是javascript专家,但你确定你在http.get中设置的回调是同步的吗?因为http.get定义为异步,因为它是httprequest@An-droid不,它不是同步的,这就是为什么我在
    URL
    的相应索引处将响应分配给
    result
    数组,而不是简单地将其推送到
    URL
    它们不是特殊的库。util.promisify和Promise是内置的。你是说result[ind]没有将响应放入正确的索引中吗很可能是这样,但您无法检查它是否为真,因为
    结果。每个
    都位于错误的位置。尝试将其置于
    结束
    回调。另一个问题是,
    every
    不会迭代稀疏(未分配)数组元素。它应该是
    result=Array(3)。填充(未定义)
    以使其正常工作。