出于好奇,我想知道两者之间是否有任何区别。
readFileSync:
function parseFile(filePath) {
let data = fs.readFileSync(filePath);
}
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');
答案 0 :(得分:0)
异步和同步代码之间有很大的区别。这种差异是否重要取决于您要做什么。您的javascript是单线程线程,因此当您与fs.readFileSync
同步读取潜在的大文件时,您将无法执行其他任何操作,例如响应传入的请求。
如果您正在运行繁忙的服务器,则可能会导致大问题,因为在读取文件时请求排队,并且您可能永远无法追上。
使用async方法,文件读取发生在代码之外,完成后会回叫代码。在执行此操作时,您的代码可以自由响应其他请求。
如果您只是尝试读取本地文件,而线程是否阻塞也没有关系,则可以使用其中任何一个。