繁体   English   中英

更新数据库比应有的更多-vue.js this。$ router.push和express

[英]Update to database happens more than it should - vue.js this.$router.push and express

我正在尝试通过此代码更新mongo数据库。 问题是它更新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中检查当前的学生,并且方向(无关紧要)的问题正在等待中。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' })
}

我真的迷路了,不知道该怎么办:((不能真正上传小提琴bc,这是一个更大的项目的一部分)预先谢谢!

我相信这可能是for循环不支持async/await
也就是说,for循环贯穿所有迭代,而不会“等待”您要运行的异步代码。
我建议您看一下诸如bluebirds的 promise.map函数之类东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM