readFileSync和在带有async/await的readFile之上使用promisify之间的区别



出于好奇,我想知道两者之间是否有区别。

readFileSync:

function parseFile(filePath) {
let data = fs.readFileSync(filePath);
}

带有promisify的readFile:

const readFilePromise = promisify(fs.readFile);
async function parseFile(filePath) {
let data = await readFilePromise(filePath);
}

如果你需要一些上下文,我会尝试读取文件夹中的一堆文件,替换每个文件中的许多值,然后重新写入。

我不知道使用异步或同步代码执行这些操作是否有区别。

完整代码:

function parseFile(filePath) {
let data = fs.readFileSync(filePath);
let originalData = data.toString();
let newData = replaceAll(originalData);
return fs.writeFileSync(filePath, newData);
}
function readFiles(dirPath) {
let dir = path.join(__dirname, dirPath);
let files = fs.readdirSync(dir); // gives all the files
files.map(file => parseFile(path.join(dir, file)));
}
function replaceAll(text) {
text = text.replace(/a/g, 'b');
return text;
}
readFiles('/files');

异步代码和同步代码之间有很大的区别。这种差异是否重要取决于你要做什么。你的javascript是单线程的,所以当你与fs.readFileSync同步读取一个潜在的大文件时,你不能做任何其他事情,比如响应传入的请求。

如果您正在运行繁忙的服务器,这可能会导致大问题,因为在读取文件时,请求会排队,您可能永远无法赶上。

使用async方法,文件读取发生在代码外部,完成后会回调代码。在执行此操作时,您的代码可以自由地响应其他请求。

如果您只是想读取一个本地文件,而线程是否阻塞并不重要,那么您可以使用任何一个。

最新更新