node.js - Firebase 存储桶下载文件需要很长时间
问题描述
我正在开发一个使用 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 设置来解决它?
谢了。
解决方案
这里有两点错误:
onFinalize() 回调不会接收
res
,而req
HTTP 触发器之类的对象会接收。它接收对象元数据作为第一个参数。 阅读文档了解详细信息。当所有工作完成时,像这样的后台触发器必须返回一个承诺。否则 Cloud Functions 会提前关闭工作,因为它不知道何时完成。如果你想从另一个函数开始所有的工作,它应该返回那个承诺。
-
exports.uploadControl = functions.storage.object().onFinalize(object => {
return uploadControl.handler(object);
});
推荐阅读
- haskell - Haskell - 字符递归列表
- javascript - 如何遍历对象数组并将键值作为字符串的一部分返回
- php - HTTP响应内容解析
- javascript - 我怎样才能到达数组内的对象,mylist = [{whole:'thing',code:'a'},{whole:'thing2',code:'b'}]
- javascript - Async\Await with promise 无法正常工作
- php - 警告:http_build_query():参数 1 应为数组或对象 whm api
- html - 使用 CSS 设置 vue 模板样式的问题
- machine-learning - 为范围内的输入值选择机器学习算法
- assembly - 为什么即使ebx中的值大于eax中的值,我的代码也会跳转到return1
- php - 如何修改 WooCommerce 类别小部件以显示子类别(如果它是父类别)并显示兄弟姐妹(如果它是子类别)?