gpt4 book ai didi

node.js - 如何等待 fs.readFile?

转载 作者:行者123 更新时间:2023-12-05 09:04:01 25 4
gpt4 key购买 nike

我在等待 fs.readFile() 时遇到问题我有一个文件,我想在其中遍历每一行,并将非重复保存在数组 domains 中。

但是,当我用 fs.readFile 调用我的函数并在它之后调用 console.log(domains) 时,域是空的。

代码

var fs = require("fs");
var re = /@(.*?):/;
let domains = [];

const parseProviders = () => {
fs.readFile("file.txt", (error, data) => {
if (error) throw error;
data
.toString()
.split("\n")
.forEach((line, index, arr) => {
try {
line = line.match(re)[1];
if(!domains.includes(line)) {
domains.push(line);
}
} catch (err) {
throw err;
}
});
console.log(domains); // this would work and print an array with non-duplicate items
});
}

(() => {
parseProviders();
console.log(domains); // prints an empty array []
})();

最佳答案

您可以在这里做很多不同的事情。 (请注意,在下面的代码示例中,我故意简化了一些内容以使其更易于阅读)您可以

<强>1。修改您的函数以获取由读取文件回调执行的回调

const parseProviders = (callback) => {
fs.readFile("file.txt", (error, data) => {
data
.toString()
.split('\n')
.forEach(line => domains.push(line))
});
});
}

(() => {
parseProviders(() => {
console.log(domains);
});
})();

<强>2。按照@robertklep 在评论中的建议使用 fs/promises 模块。如果你这样做,你应该把它变成一个异步函数

const  { readFile } = require("fs/promises")

const parseProviders = async (callback) => {
const data = await readFile("file.txt")
data
.toString()
.split('\n')
.forEach(line => domains.push(line))
});
}

(async () => {
await parseProviders()
console.log(domains);
})();

<强>3。手动 promise readFile 函数。

const parseProviders = () => {
return new Promise((accept, reject) => {
fs.readFile("file.txt", (error, data) => {
data
.toString()
.split('\n')
.forEach(line => domains.push(line))
accept();
});
});
}

(async () => {
await parseProviders()
console.log(domains);
})();
  • 注意 - 您不需要这样做,但是当您处理其他回调样式 API 时,了解如何这样做是值得的。

关于node.js - 如何等待 fs.readFile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69150882/

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