微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

fs写完文件后如何运行命令?

如何解决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 举报,一经查实,本站将立刻删除。