对不起新手问题,但我准备扔掉我的笔记本电脑。
我是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)
});
});
答案 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();
}
请注意我还没有测试过。我只是想给你一个全面的想法。