2 回答
TA贡献1886条经验 获得超2个赞
onUpdate 只查看一个文档,从您的文档屏幕截图中可以看出,它snap.before.data().sample是一个字符串,您的代码将其视为一个对象,甚至是一个查询快照?
除非我误解了,否则这是正确的您的代码吗?
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const Firestore = admin.firestore;
const db = Firestore();
exports.onProductUpdate = functions.firestore.document('Product/{productId}').onUpdate(async(snap, context) => {
const deletePost = snap.before.data().sample;
const bucket = admin.storage().bucket();
await bucket.file(deletePost).delete();
return null; // See https://firebase.google.com/docs/functions/terminate-functions
});
TA贡献1820条经验 获得超9个赞
无论问题如何forEach
,您的代码都无法工作:您尝试将 URL 传递给file()
Bucket 的方法,而您应该传递此存储桶中的文件名称。
Product一种解决方案是将文件的名称保存在文档的另一个字段中。
然后,正如 Cleanbeans 所解释的,您不需要使用forEach,因为在您的 Cloud Function 中,您只处理一个 Firestore 文档。
只需使用包含文件名的其他字段并调整 Cleanbeans 的解决方案,如下所示:
exports.onProductUpdate = functions.firestore.document('Product/{productId}').onUpdate(async(snap, context) => {
const deleteFileName = snap.before.data().fileName;
const bucket = admin.storage().bucket();
await bucket.file(deleteFileName).delete())
return null; // Don't forget to return null for example (or an Object or a Promise), to indicate to the platform that the CF can be cleaned up. See https://firebase.google.com/docs/functions/terminate-functions
});
添加回答
举报