我正在使用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。
答案 0 :(得分:1)
这里有两个错误:
onFinalize()回调不像HTTP触发器那样接收res
和req
对象。它接收对象元数据作为第一个参数。 Read the documentation for details.
背景触发类似此must return a promise when all the work is complete。否则,Cloud Functions会过早关闭工作,因为它不知道何时完成。如果您想从另一个函数开始所有工作,那么它应该返回那个承诺。
-
exports.uploadControl = functions.storage.object().onFinalize(object => {
return uploadControl.handler(object);
});