NodeJS - 写入文件有时会完成

时间:2017-04-12 00:03:06

标签: node.js

我有一个电子应用程序,在其中,我正在写一个文件。

<div id="remote_content">
  <%= render "https://www.example.com/index.html" %>
</div>

有时,数组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可能为空,我不会写入文件。 NodeJS似乎挂起,因为我没有调用envswrite()事件永远不会被调用。

为什么会这样?这种情况有解决方法吗?

2 个答案:

答案 0 :(得分:2)

如果您使用(defun insertL-f (test) (lambda (new old l) (cond ((null l) '()) ((funcall test (car l) old) (cons new l)) (t (cons (car l) (funcall (insertL-f test) new old (cdr l))))))) ,则应该收听fs.createWriteStream()事件,而不是'close'事件。

'finish'

答案 1 :(得分:1)

如果您没有要写入任何内容,只需不打开文件即可解决您的问题。而且,如果您只是收集所有要写入的数据,那么一次写入它就更有效率,如果您确实有任何要编写的内容,则更容易提前知道,因此如果没有什么可写的话,您甚至可以避免打开文件: / p>

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);
    }
}