Javascript fs写入文件后,如何运行命令?
以下是相关代码:Javascript fs写入文件后,如何运行命令?,javascript,node.js,fs,inquirer,inquirerjs,Javascript,Node.js,Fs,Inquirer,Inquirerjs,以下是相关代码: const scriptFiles = fs.readdirSync(scriptsPath) .filter(file => file.endsWith(".sql")); for (const file of scriptFiles) { var data = fs.readFileSync(`${scriptsPath}/${file}`, 'utf8');
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`)
我遇到的问题是,它试图在文件追加任何内容之前打开/启动scriptsPath/Hotfix.sql
。例如,下面是我添加到脚本中的console.log()的输出:
start scriptsPath/Hotfix.sql
Appending file1.sql...
Appending file2.sql...
有没有办法让脚本等到for循环完成后再尝试执行该命令?使用
.appendFileSync()
并删除(err)=>
回调,或者完全以异步方式编写代码
有一个异步版本的fs
API,您可以通过require('fs')访问它
在这种情况下,您必须使用wait
,您的代码必须是异步函数。对于只做一件事的实用程序脚本,这样做的好处是值得怀疑的。要么使用.appendFileSync()
并删除(err)=>
回调,要么完全以异步方式编写代码
有一个异步版本的fs
API,您可以通过require('fs')访问它
在这种情况下,您必须使用wait
,您的代码必须是异步函数。对于只做一件事的实用程序脚本,这样做的好处值得怀疑。将appendFile()异步方法替换为appendFileSync()同步方法,以便代码等待循环完成
const scriptFiles=fs.readdirSync(scriptsPath)
.filter(file=>file.endsWith(“.sql”);
for(脚本文件的常量文件){
var data=fs.readFileSync(`${scriptsPath}/${file}`,'utf8');
appendFileSync(`${scriptsPath}/Hotfix.sql`,data.toString()+“\n”);
process.stdout.cursorTo(0);
}
log(`start${scriptsPath}/Hotfix.sql`)
exec(`start${scriptsPath}/Hotfix.sql`)
将appendFile()异步方法替换为appendFileSync()同步方法,以便代码等待循环完成
const scriptFiles=fs.readdirSync(scriptsPath)
.filter(file=>file.endsWith(“.sql”);
for(脚本文件的常量文件){
var data=fs.readFileSync(`${scriptsPath}/${file}`,'utf8');
appendFileSync(`${scriptsPath}/Hotfix.sql`,data.toString()+“\n”);
process.stdout.cursorTo(0);
}
log(`start${scriptsPath}/Hotfix.sql`)
exec(`start${scriptsPath}/Hotfix.sql`)
您已经在使用*Sync
版本了,那么为什么要切换到async.appendFile()
而不是坚持使用.appendFileSync()
?(imho)更好的方法是了解异步代码/函数的工作方式以及如何使用它们。这也很有希望得出这样的结论:它应该是console.log('File'+File+'已附加')
,而不是'Appending…'
(以及在脚本的哪个位置可以安全地使用附加的文件)@Andreas我已经有一两年没有机会使用Node了,我完全忘记了appendFileSync()的存在。谢谢你的提醒!您已经在使用*Sync
版本了,那么为什么要切换到async.appendFile()
而不是坚持使用.appendFileSync()
?更好的方法是了解异步代码/函数如何工作以及如何使用它们。这也很有希望得出这样的结论:它应该是console.log('File'+File+'已附加')
,而不是'Appending…'
(以及在脚本的哪个位置可以安全地使用附加的文件)@Andreas我已经有一两年没有机会使用Node了,我完全忘记了appendFileSync()的存在。谢谢你的提醒!