【问题标题】:Firebase Bucket Download File taking a lot of timeFirebase 存储桶下载文件需要很长时间
【发布时间】:2018-10-15 18:34:07
【问题描述】:

我正在开发一个使用 Firebase 作为 BaaS 的应用。

我在上传图片(90KB 或更少)并触发云功能时遇到了时间问题。

我的触发器在上传结束时开始:

exports.uploadControl = functions.storage.object().onFinalize((req, res) => {
    uploadControl.handler(req, res);
    return 0;
});

而且,在 uploadControl 中,我有:

return mkdirp(tempLocalDir).then(() => {
    console.log('1. mkDirp - OK!');
    console.log('2. Download starts...');
    return bucket.file(filePath).download();
}).then((content) => {
    console.log('3. Download ends');
    return 0;
});

此代码运行良好,但问题在于第 2 步和第 3 步之间花费的时间... 需要 24 秒或更长时间。

如何解决这个问题?代码有问题吗?还是有 Firebase 设置来解决它?

Tks.

【问题讨论】:

    标签: node.js firebase google-cloud-functions firebase-storage


    【解决方案1】:

    这里有两个问题:

    1. onFinalize() 回调不像 HTTP 触发器那样接收 resreq 对象。它接收对象元数据作为第一个参数。 Read the documentation for details.

    2. 类似这样的背景触发器must return a promise when all the work is complete。否则 Cloud Functions 会提前关闭工作,因为它不知道何时完成。如果你想从另一个函数开始所有的工作,它应该返回那个承诺。

    -

    exports.uploadControl = functions.storage.object().onFinalize(object => {
        return uploadControl.handler(object);
    });
    

    【讨论】:

    • 感谢您的回答。两个问题都解决了。尽管如此,时间问题仍然存在。该代码可以下载文件,但花费的时间还很长(21 秒)。你有什么其他建议吗?
    • 没必要。它真的奏效了!更改返回一个承诺解决 o 问题。谢谢你的帮助!
    猜你喜欢
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多