【发布时间】:2019-08-08 01:33:43
【问题描述】:
我希望我的 firebase 网络应用程序上传一个文件,并且我希望有一个云功能来发现这个文件并根据它的内容创建一个数据库对象。这是我尝试过的许多变体中的最后一个变体......
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const { Storage } = require('@google-cloud/storage');
admin.initializeApp();
const db = admin.firestore();
exports.onStorageFinalize = functions.storage.object().onFinalize((object) => {
const storage = new Storage();
const bucket = storage.bucket('my app's storage bucket name');
return bucket.file(object.name).download(function (err, contents) {
// problem: no err, no contents, set doesn't run just a warning about promises!
const result = `got err=${err}, contents=${contents}`
return db.collection('myCollection').doc().set({
result: result
})
});
});
非常小的文件被上传,这个触发器运行。当我不尝试获取文件的内容时,数据库对象会被很好地创建(使用文字字符串而不是文件结果)。
但是当我如上所示运行它时,首先我会收到一条警告:
onStorageFinalize:函数返回未定义、预期的 Promise 或 价值
错了。 file().download() 的文档说它返回了一个承诺......而且,更重要的是,数据库 set() 没有运行。
谷歌文档在这个看似主流的用例上是多么令人困惑和晦涩(我认为是错的?),这让我感到震惊。如果有人可以提供帮助,我们将不胜感激。
【问题讨论】:
标签: firebase google-cloud-firestore google-cloud-storage google-cloud-functions