如何解决fs写完文件后如何运行命令?
这是有问题的代码:
explorer.openAndPassFocus
我遇到的问题是它试图在将任何内容附加到文件之前打开/启动 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`)
。例如,这是我已添加到脚本的console.log()的输出:
scriptsPath/Hotfix.sql
有没有办法让脚本等待for循环完成之后再尝试执行命令?
解决方法
要么使用.appendFileSync()
并删除(err)=>
回调,要么将代码完全异步编写。
有fs
API的异步版本,您可以通过require('fs').promises
访问它。
在这种情况下,您将必须使用await
,您的代码必须是异步函数。对于只做一件事的实用程序脚本,这样做的好处值得怀疑。
用 appendFileSync() 同步方法替换 appendFile() 异步方法,以便代码等待直到循环已经完成。
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`)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。