为什么即使元素不被插入到文档的FireStore阵列中的successListener叫?

Jayesh巴布:

我用下面的代码用户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 uidviews阵列。如果它不存在,创建更新和增加计数器,否则不会采取任何行动。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

FireStore和地图/阵列,文档列表到Kotlin中的阵列

为什么OpenCV中的结构元素不对称?

为什么即使解决了诺言也叫捕捞案?

如何使svg中的元素不被viewbox拉伸?

Firestore Java 将文档插入到集合中

提供的元素不在文档中 - Reactjs

为什么叫XMLHttpRequest?

为什么叫iota?

为什么叫ROM?

为什么以下元素不旋转?

为什么元素不显示水平?

为什么我的元素不会淡入?

为什么此react元素不渲染?

为什么不能在特定索引处将元素插入到 ArrayList 中?

为什么列表理解元素与生成器元素不同,在 Pycharm iPython 提示中?

为什么aq元素中的前导空白与其他内联元素不同?

为什么输入元素在bootstrap col-auto列中的呈现与跨度元素不同?

为什么未在Cloud Firestore中按顺序添加文档?

为什么列表中的元素不在同一结构中?

为什么 Airflow/Composer 宏不被插入/解释?

为什么即使事后没有修改,Java中的局部变量也不被视为“有效的最终变量”?

为什么子元素不填充父元素?

为什么我的简单元素不会在此React渲染方法中渲染?

为什么我列表中的元素不会被删除

为什么Text元素不会在View中垂直居中?

为什么单个表单元素不在控制器中返回值?

当使用带flex属性的li时,为什么元素不在一行中?

当元素不在DOM中时,为什么Selenium Webdriver findElements(By.Id)超时?

为什么在Ruby中String的字符元素不能使用危险的方法?