在我的Android应用中,我在Firebase数据库树中删除了一些数据,因为我想同时从树中删除多个路径。在事务中删除的路径如下:
伪代码:
begin transaction
for all eventId's in a list delete member with memberid
/contexts/uid/contextId/events/eventId/members/memberId
end for
then delete member from
/contexts/uid/contextId/members/memberId
commit
end transaction
我在我的Android应用程序中使用以下java代码,它运行良好
database.getReference(Global.DEV_PREFIX).runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
for (String eventKey : eventKeySet) {
mutableData.child("/contexts/" + getCurrentUserId() + "/" + contextId + "/events/" + eventKey + "/members/" + member.getId()).setValue(null);
}
mutableData.child("/contexts/" + getCurrentUserId() + "/" + contextId + "/members/" + member.getId()).setValue(null);
return Transaction.success(mutableData);
}
@Override
public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {
if (databaseError == null) {
callback.onSucess();
} else {
callback.onError(databaseError);
}
}
});
但是现在我想要一个云功能来监听成员的删除并从存储中删除一些文件。
我做了很多测试,我无法理解这种行为。以非事务方式删除成员时会触发云功能。但是在事务中删除时,永远不会在服务器中触发.onDelete事件(也不会触发onWrite事件)。 My Cloud功能按以下方式定义:
exports.memberDeleteTrigerTest = functions.database.ref('/contexts/{userId}/{contextId}/members/{memberId}/')
.onDelete(event => {
console.log('Hello memberDeleteTrigerTest');
return ;
});
我试图听取会员的内心财产但没有成功:
exports.memberDeleteTrigerTest = functions.database.ref('/contexts/{userId}/{contextId}/members/{memberId}/id')
.onDelete(event => {
console.log('Hello memberDeleteTrigerTest');
return ;
});
也许我在Android应用中删除交易中的数据的方式不合适。你有什么建议吗?
提前致谢