使用Knex查询插入多行

时间:2017-10-22 20:04:27

标签: javascript postgresql knex.js

router.post('/', (req, res) => {
  // req.body = [1,2,3,4,5] (these are player ids)
  function createGame() {
      return knex.insert({'gameDate': new Date(), 'season_id': 1})
          .into('game') // creates new game with new id
          .returning('id') // return that new game id
      }
      .then(game_Id => {
          function createPlayerGameRow(game_id, req.body) { // req refer above
              req.body.forEach(id => {
                  return knex.insert({ 'player_id': id, 'game_id': game_id })
                     .into('player_game')
              })
          }
      })
})

这部分代码必须分离查询,其中第一个查询createGame()在我的游戏表中创建一个新游戏。这很好。

我在尝试在第一个的承诺中链接另一个查询(createPlayerGameRow())时遇到问题。

该函数将触发并循环遍历id的数组,但它不会在我的player_game表中插入新行,以表示播放1,2,3,4和5现在能够记录一些统计数据。

我看起来很远,并且没有运气来搞清楚这一点。将插入循环到player_game表中我一定做错了。

1 个答案:

答案 0 :(得分:0)

想出来:需要使用Promise.all()并映射到id的数组

router.post('/', (req, res) => {
  let player_ids = req.body.players
  queries.createGame()
    .then(game_id => {
      return Promise.all(player_ids.map(player_id => {
        return Promise.resolve(queries.createPlayerGame(game_id[0], player_id))
      }))
      .then(elem => {
        res.json({msgInside: elem})
      })
    })
    .catch(err => {
       res.json({msgErr: err})
    })
})