gpt4 book ai didi

javascript - 附加到每个代理的列表?

转载 作者:行者123 更新时间:2023-12-02 22:09:24 24 4
gpt4 key购买 nike

对于此列表中的每个代理,我将其拆分并需要将其附加到文件中的数组中。

我已经尝试过了,但 5 个代理中只添加了一个:

function saveProxies() {
const fs = require("fs")

let proxies = document.getElementById("proxies").value.split(/\r?\n/)

// for(i = 0; i < proxies.length; i++) {
// await doo(proxies[i])
// }

proxies.forEach(proxy => {
// doo(proxy)
let p1 = `${proxy.split(":")[0]}:${proxy.split(":")[1]}`
let p2 = proxy.split(":")[2]
let p3 = proxy.split(":")[3]

fs.readFile("views/proxies.json", (err, data) => {
let arr = JSON.parse(data)

arr.push({
address: p1,
username: p2,
password: p3
})

fs.writeFile("views/proxies.json", JSON.stringify(arr), (err) => {})
})


})
}

最佳答案

fs.writeFile()是异步的,您的代码在处理下一个代理之前不会等待它完成。因此,对于每个代理,代码都会读取内存中的初始文件,更改数据结构(添加一个条目),然后将其写回到文件中。最后一次完成的 fs.writeFile() 调用决定了文件的内容。

一个简单的解决方案是使用 fs.readFileSync()fs.writeFileSync() 。这样就没有异步处理,对于每个代理,代码都会读取文件的实际内容并在处理下一个代理之前更新它。

但是这个解决方案效率不高!没有必要再次读取(并解析)文件的内容,用于写入文件的数据已经存在于内存中。

正确的解决方案是读取一次文件,更新所有代理的内存中的数据,然后将其写回到文件中。

同步版本可能如下所示:

const fs = require("fs")

let proxies = document.getElementById("proxies").value.split(/\r?\n/)
let filepath = "views/proxies.json";

function saveProxies(proxies, filepath) {
let data = fs.readFileSync(filepath)
let arr = JSON.parse(data)

proxies.forEach((proxy) => {
let pieces = proxy.split(':')
arr.push({
address: `${pieces[0]}:${pieces[1]}`,
username: pieces[2],
password: pieces[3]
})
})

fs.writeFileSync(filepath, JSON.stringify(arr))
}

您还应该处理错误(文件不存在或不可读/不可写、其内容不是有效的 JSON 等)。

关于javascript - 附加到每个代理的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59607613/

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