我的目标是这样做:
function writer1(data,file){
const w = fs.createWriteStream(file,{flags:'w'})
for(let i = 0; i< data.length; i++){
w.write(data[i])
}
w.end()
}
function writer2(data,file, *some-stuff*){
const w = fs.createWriteStream(file,{flags:'w'})
for(let i = 0; i< data.length; i++){
if(data[i] !== *some-stuff*){
w.write(data[i])
}
}
w.end()
}
writer1(data,"file.txt")
writer2(data,"file.txt", "some string")
重要注意事项:在我写的这段代码中,writer 1有一个要运行的条件;仅当需要写入的文件不存在时,它才运行
但这里是我的问题;如果相应的文件不存在,即如果项目的“STATE”为init-state,则启动writer 1,但以某种方式屏蔽writer 2的执行。结果是一个填充了内容DATA的txt文件。
在第二次传递中,writer 1不启动,不隐藏writer 2的执行,结果是一个txt文件,其中填充了DATA减去变量some-stuff的内容。
本质上,我的问题是:
为什么第一个流会遮蔽第二个流?如何防止这种情况?
我确实理解,为了允许其他流访问相同的文件,有一些异步的东西要处理,或者需要向流对象发出请求。
1条答案
按热度按时间2ul0zpep1#
写入流是一个异步过程。如果在
writer1
关闭文件之前在writer2
中再次打开该文件,则writer2
的写入可能会丢失。writer1
的以下变体是一个异步函数,它只在关闭文件后解析。您可以在调用writer2
之前执行await
。但我支持jfriend00的问题,即你试图解决的是什么问题。