使用firebase云功能删除多个文档

时间:2018-03-27 14:04:56

标签: javascript node.js firebase google-cloud-functions

对不起新手问题,但我准备扔掉我的笔记本电脑。

我是js的新手,并且一直在努力了解如何使用promises。

当删除会话时,会触发此功能,并应循环抛出会话中包含的所有消息并将其删除。

我的问题是我不知道在哪里删除邮件或如何删除邮件。 如何删除邮件?

exports.deleteMessages = functions.firestore
.document('users/{userId}/conversations/{conversationId}')
.onDelete(event => {

    // Get an object representing the document prior to deletion
    const deletedConversation = event.data.previous.data();

    return database.collection('messages')
        .where('conversationId', '==', deletedConversation.id).get()
        .then(snapshot => {

            snapshot.forEach(document => {
                const data = document.data();
                database.collection('messages').document(data.id).delete();
            });

            return console.log("Don't even no why I'm returning this")
        })
        .catch(error => {
            console.log('Error when getting document ' + error)
        });
});

1 个答案:

答案 0 :(得分:0)

你必须使用Promise.all(),"返回一个Promise,它在iterable参数中的所有promise都已解析或者iterable参数不包含promise时解析。"

你应该这样做:

const promises = [];

return database.collection('messages')
    .where('conversationId', '==', deletedConversation.id).get()
    .then(snapshot => {

        snapshot.forEach(document => {
            //Create a Promise that deletes this document
            //Push the Promise in the "promises" array
            promises.push(deleteDocPromise(document))

        });
        //and return: 
        return Promise.all(promises);
    })
    .then(
      //Do whatever you want in case of succesfull deletion of all the doc
    )
    .catch(error => {
        ....
    });

为了创建删除的承诺,请执行

之类的操作
function deleteDocPromise(document) {
        //using the code of your question here
        const data = document.data();
        return database.collection('messages').doc(data.id).delete();   
}

请注意我还没有测试过。我只是想给你一个全面的想法。