【问题标题】:Update to database happens more than it should - vue.js this.$router.push and express对数据库的更新比它应该发生的更多 - vue.js this.$router.push 和 express
【发布时间】:2018-09-04 08:15:34
【问题描述】:

我正在尝试通过此代码更新 mongo db。问题是它更新了 3 次而不是一次(我的当前数据在 posts.date 中有 3 个日期) 我正在使用 vue mongo express this.posts 是数据 数据看起来像这样

  {
  "posts": [
    {
      "date": [
        {
          "date": "180320",
          "attend": "present"
        },
        {
          "date": "180321",
          "attend": "absent"
        },
        {
          "date": "180322",
          "attend": "present"
        }
      ],
      "_id": "5ab7a6396b92178b5a9c5118",
      "netid": "cjp",
      "name": "Colton"
    },
    {
      "date": [
        {
          "date": "180320",
          "attend": "present"
        },
        {
          "date": "180321",
          "attend": "present"
        },
        {
          "date": "180322",
          "attend": "present"
        }
      ],
      "_id": "5ab7a6466b92178b5a9c5119",
      "netid": "do",
      "name": "Daniela"
    },
    {
      "date": [
        {
          "date": "180320",
          "attend": "present"
        },
        {
          "date": "180321",
          "attend": "absent"
        },
        {
          "date": "180322",
          "attend": "absent"
        }
      ],
      "_id": "5ab7a6516b92178b5a9c511a",
      "netid": "msa",
      "name": "Marcus"
    },
    {
      "date": [
        {
          "date": "180320",
          "attend": "present"
        },
        {
          "date": "180321",
          "attend": "absent"
        },
        {
          "date": "180322",
          "attend": "late"
        }
      ],
      "_id": "5ab7bf736b92178b5a9c511b",
      "netid": "test123",
      "name": "Test"

代码如下所示。目标是当前学生。 每个 if 语句都会检查 this.posts 中的当前学生和方向(无论哪种方式) 问题是 await PostsService.updatePost 正在更新数据库 3 次,而它应该只更新一次。

  async updatePost (target, direction) {
  let day = this.today
  for (let student in this.posts) {
    if (this.posts[student].name == target && direction == 'left') {
      let dateupdate = {date: day, attend: "present"}
      let datearr = this.posts[student].date
     //some more code in the middle
      await PostsService.updatePost({
        id: this.posts[student]._id,
        netid: this.posts[student].netid,
        name: this.posts[student].name,
        date: this.posts[student].date
      })
    }
    if (this.posts[student].name == target && direction == 'right') {
      let dateupdate = {date: day, attend: "absent"}
      let datearr = this.posts[student].date
      //some more code in the middle
      await PostsService.updatePost({
        id: this.posts[student]._id,
        netid: this.posts[student].netid,
        name: this.posts[student].name,
        date: this.posts[student].date
      })
    }
  }
    this.$router.push({ name: 'Posts' })
}

我真的很迷茫,不知道该怎么办:( (不能真正上传小提琴,因为它是更大项目的一部分) 先感谢您!

【问题讨论】:

    标签: javascript mongodb mongoose vue.js async-await


    【解决方案1】:

    我相信这可能是 for 循环不支持 async/await 的原因。
    也就是说,for 循环会运行所有迭代,而不会“等待”您正在运行的异步代码完成。
    我建议你看一下 bluebirds's promise.map 之类的函数。

    【讨论】:

    • 我猜这是因为 for 循环。有没有办法绕过它?我正在尝试寻找不需要 bluebird/ 或同等产品的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 2022-01-18
    • 2021-03-24
    • 2023-03-25
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多