fs 完成写入文件后,如何 运行 命令?
How can I run a command once fs is done writing to a file?
这里是有问题的代码:
const scriptFiles = fs.readdirSync(scriptsPath)
.filter(file => file.endsWith(".sql"));
for (const file of scriptFiles) {
var data = fs.readFileSync(`${scriptsPath}/${file}`, 'utf8');
fs.appendFile(`${scriptsPath}/Hotfix.sql`, data.toString() + "\n", (err) => {
if (err) throw new Error(err)
console.log('Appending ' + file + '...')
})
process.stdout.cursorTo(0);
}
console.log(`start ${scriptsPath}/Hotfix.sql`)
exec(`start ${scriptsPath}/Hotfix.sql`)
我 运行 遇到的问题是它试图 open/start scriptsPath/Hotfix.sql
在任何内容附加到文件之前。例如,这是我添加到脚本中的 console.log()s 的输出:
start scriptsPath/Hotfix.sql
Appending file1.sql...
Appending file2.sql...
有没有办法让脚本等到 for 循环完成后再尝试执行命令?
要么使用 .appendFileSync()
并删除 (err)=>
回调,要么将您的代码完全编写为异步。
fs
API有一个异步版本,您可以通过require('fs').promises
访问它。
在这种情况下,您将不得不使用 await
,您的代码必须是异步函数。对于只做一件事的实用程序脚本,这样做的好处值得怀疑。
将appendFile()异步方法替换为appendFileSync() 同步方法,以便代码等待循环完成。
const scriptFiles = fs.readdirSync(scriptsPath)
.filter(file => file.endsWith(".sql"));
for (const file of scriptFiles) {
var data = fs.readFileSync(`${scriptsPath}/${file}`, 'utf8');
fs.appendFileSync(`${scriptsPath}/Hotfix.sql`, data.toString() + "\n");
process.stdout.cursorTo(0);
}
console.log(`start ${scriptsPath}/Hotfix.sql`)
exec(`start ${scriptsPath}/Hotfix.sql`)
这里是有问题的代码:
const scriptFiles = fs.readdirSync(scriptsPath)
.filter(file => file.endsWith(".sql"));
for (const file of scriptFiles) {
var data = fs.readFileSync(`${scriptsPath}/${file}`, 'utf8');
fs.appendFile(`${scriptsPath}/Hotfix.sql`, data.toString() + "\n", (err) => {
if (err) throw new Error(err)
console.log('Appending ' + file + '...')
})
process.stdout.cursorTo(0);
}
console.log(`start ${scriptsPath}/Hotfix.sql`)
exec(`start ${scriptsPath}/Hotfix.sql`)
我 运行 遇到的问题是它试图 open/start scriptsPath/Hotfix.sql
在任何内容附加到文件之前。例如,这是我添加到脚本中的 console.log()s 的输出:
start scriptsPath/Hotfix.sql
Appending file1.sql...
Appending file2.sql...
有没有办法让脚本等到 for 循环完成后再尝试执行命令?
要么使用 .appendFileSync()
并删除 (err)=>
回调,要么将您的代码完全编写为异步。
fs
API有一个异步版本,您可以通过require('fs').promises
访问它。
在这种情况下,您将不得不使用 await
,您的代码必须是异步函数。对于只做一件事的实用程序脚本,这样做的好处值得怀疑。
将appendFile()异步方法替换为appendFileSync() 同步方法,以便代码等待循环完成。
const scriptFiles = fs.readdirSync(scriptsPath)
.filter(file => file.endsWith(".sql"));
for (const file of scriptFiles) {
var data = fs.readFileSync(`${scriptsPath}/${file}`, 'utf8');
fs.appendFileSync(`${scriptsPath}/Hotfix.sql`, data.toString() + "\n");
process.stdout.cursorTo(0);
}
console.log(`start ${scriptsPath}/Hotfix.sql`)
exec(`start ${scriptsPath}/Hotfix.sql`)