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()的存在。谢谢你的提醒!