我有一个电子应用程序,在其中,我正在写一个文件。
<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似乎挂起,因为我没有调用envs
,write()
事件永远不会被调用。
为什么会这样?这种情况有解决方法吗?
答案 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);
}
}