【问题标题】:Firestore initial update is not recognized. Why?无法识别 Firestore 初始更新。为什么?
【发布时间】:2021-08-04 03:59:13
【问题描述】:

我有这段代码,用于更新电影的点赞数。但第一次更新无法识别。因此,如果我单击该按钮 5 次。 Firestore 上仅更新 4.

async liked() {
            await db.collection('movies').doc(this.movie.id).update({
                likes: this.movie.likes++
            });
        },

我需要更多代码,我会更新问题。

【问题讨论】:

  • 也许您应该在更新完成之前禁用该按钮。
  • 以及我将如何具体做到这一点。可以问吗?
  • 例如我的答案。现在我不知道您是否在 js 中使用 react 或其他东西,所以可能需要对您的代码进行一些小的修改。

标签: javascript firebase vue.js google-cloud-firestore


【解决方案1】:

Postfix increment (x++) 在评估后更改变量,因此您的原始代码将likes 更新为this.movie.likes 的当前值,然后将其递增。

也就是这段代码:

await db.collection('movies').doc(this.movie.id).update({
  likes: this.movie.likes++
});

...等价于:

await db.collection('movies').doc(this.movie.id).update({
  likes: this.movie.likes
});
this.movie.likes += 1;

相反,prefix increment (++x) 在评估之前更改变量

await db.collection('movies').doc(this.movie.id).update({
  likes: ++this.movie.likes
});

...相当于:

this.movie.likes += 1;
await db.collection('movies').doc(this.movie.id).update({
  likes: this.movie.likes
});

但正如您在答案中发现的那样,在自己的行上增加变量可能更清楚。

【讨论】:

    【解决方案2】:

    正如其他答案所指出的,您需要在更新文档之前增加值。但是,我会给你另一个选择,让 Firestore 为你增加值。这样做可以防止可能同时出现多个更新的竞争条件。

    在更新查询中使用 Firestore.FieldValue.increment 操作。 https://firebase.google.com/docs/reference/js/firebase.firestore.FieldValue#static-increment

    类似

    async liked() {
                await db.collection('movies').doc(this.movie.id).update({
                    likes: firebase.Firestore.FieldValue.increment(1)
                });
            }
    

    【讨论】:

      【解决方案3】:

      只需要在更新前进行计算

      async liked() {
                  this.movie.likes++
                  await db.collection('movies').doc(this.movie.id).update({
                      likes: this.movie.likes
                  });
              },
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-29
        • 2017-07-13
        • 2021-04-27
        • 2020-01-27
        相关资源
        最近更新 更多