我当前正在os.tmpdir文件夹中写入Google Cloud函数中的文件。现在,我知道每次函数触发都略有不同,并且两次函数调用之间的tmp文件夹将永远不会相同(无法两次引用同一个tmp文件夹)。我的问题是函数完成执行之前是否需要删除文件,或者是否自动取消了所有tmp内存的引用。
编辑: 当我写os.tmpdir时,当我查看目录时可以看到该文件,但是在随后的调用中却什么也看不到。我认为这意味着该文件以某种方式不再存在(不太可能),或者我正在其他位置查找。
下面是我用来编写文件的代码。
var wstream = fs.createWriteStream(os.tmpdir() + '/myOutput.txt');
wstream.write('Hello world!\n');
wstream.write('Another line\n');
wstream.end();
wstream.on('finish', function () {
console.log('file has been written');
fs.readdir(os.tmpdir(), (err, files) => {
console.log(files.length);
files.forEach(file => {
console.log("Hey Again3", file);
});
})
edit 2:我一直在进行一些测试,而一个新系统的发生比这个问题所指示的发生的频率要高得多(我每次都观察到,而在这里我被告知几乎永远不会发生这种情况)。我还问了另一个问题,并从另一位Firebase员工那里收到了一些相互矛盾的建议,这些建议与此处的个人测试更加一致:Can't Find file after having written to it in Google Cloud Functions
建议保持一致,但我一次也没有观察到,在一次调用多个函数之间具有完全相同的文件系统,如下所示。
答案 0 :(得分:1)
首先,由os.tmpdir()
标识的tmp文件夹始终相同。如果您发现不同的地方,请准确说明您所看到的。
第二,您没有义务从tmpdir中删除文件,但是它们会占用内存(这是基于内存的文件系统)。留下这些文件会使您将来的函数调用变得更加昂贵,因为随着时间的流逝您要为内存付费。同样,您可能会在累积临时文件时冒用尽内存的风险。为了提高效率,您应该始终在功能完成之前删除创建的所有文件。