我用下面的代码用户id添加到云的FireStore文档中的阵列:
DocumentReference reference = firebaseFirestore.collection("photos").document(photoId);
reference.update("views", FieldValue.arrayUnion(currentUser.getUid()))
.addOnSuccessListener(new OnSuccessListener<Void>()
{
@Override
public void onSuccess(Void aVoid)
{
reference.update("viewsCount", FieldValue.increment(1));
}
});
正如你可以从代码中看到的,我想viewsCount
只有当元素被添加到增量views
阵列。
根据该添加数据文件,arrayUnion()
添加元素的数组,但仅元素不存在,并且那正是我想要的。
但是,问题是,当我添加一个已经存在的元素到数组,元素没有插入,但addOnSuccessListener
被调用,viewsCount
递增和FailureListener的永远不会被调用。有什么办法防止这种情况?我想viewsCount
,当元件被插入到将被仅递增views
阵列。
但是,问题是,当我添加一个已经存在的元素到数组,元素没有插入,但
addOnSuccessListener
被调用,viewsCount递增,failureListener
永远不会被调用。
这是正常行为。请注意,OnSuccessListener
您目前使用的要求,你只有当该特定操作的最终结果是成功的数据库已执行的操作。
你的具体情况:
.update("views", FieldValue.arrayUnion(currentUser.getUid())
的OnSuccessListener
,它是将手术后叫uid
你的views
阵列成功。它并不真正的问题如果uid
已经有或没有,整个操作成功。这是真实的,uid
没有添加到阵列,但即使这样,操作成功。
也请rememeber,一个任务被认为是成功时由工作代表的工作结束后,如预期,没有任何错误。在另一方面,OnFailureListener
当任务失败,一个异常被调用。因此,它可以是一个结果或异常,不可能兼顾。所以增加一个uid
已经在一个阵列exsists永远不能cosidered失败。
为了解决这个问题,您应该创建一个get()
电话,让整个文档和检查的的existnce uid
的views
阵列。如果它不存在,创建更新和增加计数器,否则不会采取任何行动。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句