【问题标题】:For - of loop with async/await together with pool.query for postgresFor - of 循环与 async/await 以及用于 postgres 的 pool.query
【发布时间】:2021-08-15 14:55:10
【问题描述】:

我在这里查看另一个 SO 线程:async/await with loop 并想对我的代码做类似的事情,但不幸的是我看不到错误是什么。

这里的groups 值是一个取自req.body.allGroups 的数组。它似乎根本没有在我的 my_groups postgres 表中执行任何插入操作。

app.post("/create-group", async (req, res) => {
  try {
    const groups = req.body.allGroups; 
    console.log(groups);

    for (const group of groups) {   
      console.log(group.groupName);
      let newGroup = await pool.query(       
        "INSERT INTO my_groups (id, group_name) VALUES($1, $2) RETURNING group_id",
            [ 99, group.groupName ]
      );
      res.json(newGroup.rows[0]);
    }

  } catch(err) {
    console.error(err.messasge);
  }
})

>>> 更新:

我已根据以下查询更新了我的代码,还添加了 console.log 消息。

运行上述更新代码后的console.log输出如下:

[
  {
    groupName: 'G1'
  },
  {
    groupName: 'G2'
  }
]
G1
undefined

【问题讨论】:

  • 你确定req.body.allGroups 包含一个Promise 吗?在属性而不是函数上看到 await 并非不可能,但也很不寻常。
  • 当你设置 res.json 时不会向用户发送响应,在一次迭代后有效地结束循环
  • 真正的问题是什么? pool.query("INSERT ...") 不会创建新条目?那为什么取这个名字呢?
  • @James 它并没有结束循环。它只会导致从第二次迭代开始的异常。
  • @tonyf 将它们收集到一个数组中,循环后用数组响应?我不知道你想达到什么目的。

标签: javascript node.js express async-await node-postgres


【解决方案1】:

通过控制台记录整个错误,我设法跟踪问题实际上是我在 my_groups 表上的外键约束违规。

现在一切都好。

【讨论】:

    【解决方案2】:

    一些输出会很有帮助。但我建议你调试组的值,我相信它保持为空,所以循环永远不会运行,这就是为什么什么也没发生,你可能不会得到可能的错误。 此外,await 应该放在我们想要等待的 promise 之前。所以请确保req.body.allGroups 是一个承诺。

    【讨论】:

    • 更新了我的帖子并提供了示例输出。
    【解决方案3】:
    1. 你不应该在 for 循环中执行 res.json()。 尝试将其放在下方一分,并对其进行调整,因为 newGroup 变量将无法访问。

    2. await req.body.allGroups 并不常见。除非您的库需要,否则不应使用此 await。

    3. 无论如何,您能否在循环前尝试 console.log(groups) 以确认数据存在。如果是,那么您的游泳池有问题。

    4. catch 部分应该执行类似 res.send('Error') 的操作 或更好:下一个(错误); 否则,浏览器连接将保持挂起状态。

    【讨论】:

    • 更新了我的帖子并提供了示例输出。希望这会有所帮助
    • 能否请您帮忙将res.json() 放置在循环之外,newGroup 变量未定义?
    猜你喜欢
    • 1970-01-01
    • 2020-09-24
    • 2019-03-12
    • 1970-01-01
    • 2021-02-27
    • 2020-07-10
    • 2021-08-13
    • 2018-01-12
    • 1970-01-01
    相关资源
    最近更新 更多