Firebase Cloud Functions不会在子集合中创建文档

时间:2020-10-01 22:44:09

标签: javascript firebase google-cloud-functions

当我在Flutter应用程序中使用Firebase Cloud Functions在集合内创建文档时,它将起作用:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
exports.onCreatePost = functions.firestore
    .document("/posts/{postId}")
    .onCreate(async (snap, context) => {
        const doc = snap.data()
        const creatorId = doc.creatorId
        admin.firestore().collection('feeds').doc(creatorId).set({ 
                  Id: creatorId, 
                  isRead: false, 
                  timestamp: admin.firestore.FieldValue.serverTimestamp(), 
            })
        });

但是当我尝试将同一文档添加到该文档的子集合中时,它不起作用:

const functions = require('firebase-functions');
const admin = require('firebase-admin'); 
exports.onCreatePost = functions.firestore
    .document("/posts/{postId}")
    .onCreate(async (snap, context) => {
        const doc = snap.data()
        const creatorId = doc.creatorId
        admin.firestore().collection('feeds').doc(creatorId).collection('feedItems').doc(context.params.postId).set({ 
                  Id: creatorId, 
                  isRead: false, 
                  timestamp: admin.firestore.FieldValue.serverTimestamp(), 
            })
        });

我在做什么错?我确实在日志中看到云功能已成功完成,但是该文档未在我的Cloud Firestore中创建。enter image description here

1 个答案:

答案 0 :(得分:1)

我不希望这两个函数都能可靠地工作,因为您不会返回异步工作完成后可以解决的承诺。如果您不返回承诺,则Cloud Functions可能会在完成之前终止您的功能。

至少,您应该返回set()返回的承诺。

return admin.firestore()
  .collection('feeds')
  .doc(creatorId)
  .collection('feedItems')
  .doc(context.params.postId)
  .set(...)

您还应该检查Cloud Functions日志中是否有错误。由于代码完全在应用程序外部运行,因此错误不会显示在您的应用程序中。

我也建议reviewing the documentation