gpt4 book ai didi

javascript - Node JS for 循环和数组推送

转载 作者:太空宇宙 更新时间:2023-11-04 02:08:47 25 4
gpt4 key购买 nike

我有 1,211,434 个 IP 地址需要转换为地理位置。我发现一个 api 通过使用 GET 请求来回答这个问题。但问题是,当使用 for 循环时,我无法正确发送 IP 地址并接收描述。

我主要有两个问题:

  1. 我就是无法输出ip_and_info数组,也找不到原因。谁能告诉我出了什么问题吗?

  2. 现在,我编写的代码可以检索我需要的所有信息,test_ip.txt 中有大约 200 个 ip 地址。如果我尝试发送所有这些 1M IP 地址,是否会有潜在问题?

有谁可以给​​我一些建议吗?

非常感谢。

我的代码如下:

fs = require('fs')
async = require("async")
http = require('http')

ip_and_info = []
// getIPInfo("1.171.58.24")


fs.readFile("../test_ips.txt", "utf-8", (err, content, printArr) => {

content = content.split("\n")

async.each(content, (ip) => {
content = getIPInfo(ip)
// console.log(ip)
}, (err) => {
if (err) {
console.log(err)
} else {
console.log(ip_and_info)
}
})

// for (i in content) {
// ((ip) => {
// getIPInfo(ip)
// })(content[i])
// }


});



function getIPInfo(ipAddress) {

options = {
host: 'freegeoip.net',
path: '/csv/' + ipAddress
}

request = http.get(options, function(response) {
// console.log('STATUS: ' + response.statusCode)
// console.log('HEADERS: ' + JSON.stringify(response.headers))

// Buffer the body entirely for processing as a whole.
bodyChunks = []
response.on('data', function(chunk) {

bodyChunks.push(chunk)

}).on('end', function() {

body = Buffer.concat(bodyChunks)
content = body.toString('ascii')
ip_and_info.push(content)
console.log(content)
return content

})
})

request.on('error', function(e) {
console.log('ERROR: ' + e.message)
})
}

非常感谢!

最佳答案

问题出在这一行

content = getIPInfo(ip)

getIPInfo 应该是一个异步函数。一种方法是向函数发送回调,并在函数中返回回调中的输出。

async.each(content, getIPInfo, (err) => {
if (err) {
console.log(err)
} else {
console.log(ip_and_info)
}
})

以及在getIPInfo函数中

function getIPInfo(ipAddress, callback) {
.....
.....
ip_and_info.push(content)
callback();
}

此外,不要使用 async.each,而是使用 async.eachSeries 或 async.eachLimit,否则它将尝试发送对所有 1,211,434 ips 的请求。

关于javascript - Node JS for 循环和数组推送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43201424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com