我正在尝试从s3存储桶中的文件中获取数据并写入临时文件,然后从该临时文件中读取数据。文件已成功创建,临时文件中显示的是html数据,但是当我尝试进行console.log下一步时,它返回空。
try {
...
const params = {Bucket: "somebucket", Key: "file.html"}
let tempFile = fs.createWriteStream("./temp/file.html", 'utf8')
s3.getObject(params).createReadStream().pipe(tempFile)
fs.readFile('./temp/file.html', 'utf8', (err, data) => {
if (err) console.log(err)
else {
console.log("cannot get data?") //this shows up
console.log(data) // this one does not shows up
}
})
...
} catch {
...
}
有人对此有经验吗?
更新:
我意识到数据在文件内部,没有getObject()部分就可以很好地输出,但是数据无法显示出来。可能是由于在将数据完全插入文件之前已读取文件。我应该如何更改代码,以便可以在文件中插入的数据完成后延迟readFile的执行。我尝试了setTimeout但失败了。
答案 0 :(得分:0)
这很可能是由nodejs的异步特性引起的问题。您的函数调用(s3.getObject和fs.readFile)彼此异步运行,因此fs.readFile执行时无法读取任何内容。
您可以通过回调/承诺等待s3.getObject,然后在回调/承诺完成后等待fs.readFile(或直接访问数据对象而不是将其写入文件,具体取决于您的用例),此选项可能更容易)