NodeJS异步等待功能下载,上传,删除文件,无需等待上传完成

时间:2020-10-23 22:58:56

标签: javascript node.js google-cloud-storage fs

我正在使用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(),但是我不确定如何解决此问题。

0 个答案:

没有答案