我正在使用GCP存储存储一些我在本地下载的图像,然后将其上传到GCS,然后在本地删除。问题是,尽管一切都按顺序进行,但我的函数在删除对象之前不会等待上传完成。这就是我所拥有的:
request.head(img_url, (err, res, body) => {
request(img_url)
.pipe(fs.createWriteStream(local_path))
.on("close", () => {
console.log("Downloaded: " + local_path);
console.log("Uploading...");
storage.bucket("my_bucket").upload(local_path, {
metadata: {
contentType: content_type
},
destination: storage_path
}).then(() => {
console.log("Uploaded: " + storage_path);
console.log("Deleting local file...");
fs.unlinkSync(local_path);
console.log("Deleted local file");
})
})
})
输出顺序正确:
Downloaded: ../temp/some_file.jpg
Uploading...
Uploaded: my_bucket/some_file.jpg
Deleting local file...
Deleted local file
问题在于文件似乎有机会被上传之前已被删除。我可以说出来,因为如果我注释掉fs.unlinkSync
,它就可以工作,并且该文件会显示在我的存储分区中,但是该文件仍保留在本地。
我对Javascript,Promises和async / await很陌生。我假设我没有在存储上传中正确使用.then(),但是我不确定如何解决此问题。