【发布时间】:2021-02-09 23:48:53
【问题描述】:
这里是有问题的代码:
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()s 的输出:
start scriptsPath/Hotfix.sql
Appending file1.sql...
Appending file2.sql...
有没有办法让脚本等到 for 循环完成后再尝试执行命令?
【问题讨论】:
-
您已经在使用
*Sync版本,那么为什么要切换到异步.appendFile()而不是坚持使用.appendFileSync()? -
(恕我直言)更好的方法是了解异步代码/函数如何工作以及如何使用它们。然后,这也有望得出结论,它应该是
console.log('File ' + file + ' has been appended')而不是'Appending...'(以及您可以在脚本的哪个位置安全地使用附加文件) -
@Andreas 自从我有机会使用 Node 已经一两年了,我完全忘记了 appendFileSync() 的存在。感谢您的提醒!
标签: javascript node.js fs inquirer inquirerjs