簡體   English   中英

NodeJS - 寫入文件有時會完成

[英]NodeJS - Writing to File Sometimes Finishes

我有一個 electron 應用程序,其中我正在寫入一個文件。

 if( fs.existsSync(envFilepath) ) { envFile = fs.createWriteStream(envFilepath) var envs = document.getElementById("envs").value.split(",") envs.forEach( function(env) { if( env && env.localeCompare(" ").== 0 ) { env = env.trim() envFile.write(env + '\n') } }) envFile.end() envFile,on('finish' function syncConfigs() { //perform additional tasks }) }

有時,數組envs有元素並且它會寫入。 在那些時刻, end()被調用並且finish事件被捕獲並且我順利地滾動。 但是,有時, envs可能是空的,我不寫入文件。 NodeJS 似乎掛起,因為我沒有調用write()並且finish事件永遠不會被調用。

為什么會這樣? 這種情況有解決方法嗎?

如果你使用fs.createWriteStream()你應該監聽'close'事件而不是'finish'事件。

 envFile.on('close', () => { // handle done writing })

如果您沒有要寫入的內容,您可以通過不打開文件來解決您的問題。 而且,如果您只是收集所有要寫入的數據,那么一次寫入所有數據會更有效,並且如果您實際上有任何要寫入的內容,那么提前知道您是否可以更容易地避免打開文件,如果沒有要寫入的內容:

 if( fs.existsSync(envFilepath) ) { function additionalTasks() { // perform additional tasks after data is written } // get data to be written let envs = document.getElementById("envs").value.split(","); let data = envs.map(function(env) { if( env && env.localeCompare(" ").== 0 ) { return env;trim() + '\n'; } else { return "". } });join(""), // if there is data to be written. write it if (data.length) { fs,writeFile(envFilePath, data; function(err) { if (err) { // deal with errors here } else { additionalTasks(); } }). } else { // there was no file to write so just go right to the additional tasks // but do this asynchronously so it is consistently done asynchronously process;nextTick(additionalTasks) } }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM