【问题标题】:Executing multiple queries in Nodejs route在 Nodejs 路由中执行多个查询
【发布时间】:2020-02-11 07:52:08
【问题描述】:

我有 Node.js 发布路由,我在其中使用 async/await 按顺序执行多个查询。

router.post("/foo", async (req, res) => {
    const qr1 = "str1";
    await db.query(qr1); // Works fine
    const qr2 = "str2";
    await db.query(qr2); // Works fine
    const qr3 = "str3";
    await db.query(qr3, async (err, result) => {
        if (err) {
            console.log(err);
        }
        if (result.length > 0) {
            // Required data is received – That part works
            // do something and continue to step 4
        }
    });
    // step 4 – Never gets here
});

执行表操作(即删除、插入等)的所有查询都可以正常工作。一旦我到达一个选择查询,我就会收到所需的数据,但我需要继续下一步,这不会发生。 我知道我可以通过在第 3 步中嵌套第 4 步来完成我需要的工作,但我想知道是否有其他方法可以做到这一点。

【问题讨论】:

  • 请求/响应周期在您发回响应时结束。你确定在函数内部你没有调用 res.send() 或类似的东西。
  • @khan 我查过了。我不相信我会这样做。
  • 你用什么来查询数据库 - 即你确定你的 lib 的 db.query 返回一个承诺吗?
  • @StockOverflaw。只是一个简单的 MySQL 选择查询

标签: mysql node.js post async-await


【解决方案1】:

您遇到的问题是注释 // step 4 立即执行,而 async(err 代码在查询 3 执行时异步执行。这是您的代码已更正以实现您的结果:

router.post("/foo", async (req, res) => {
try {
  const qr1 = "str1";
  await db.query(qr1); // Works fine
  const qr2 = "str2";
  await db.query(qr2); // Works fine
  const qr3 = "str3";
  const q3Result = await db.query(qr3);
  console.log('step 4');
  // step 4 – Should work fine
}
catch(err) {
  console.log(err);
}

});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    相关资源
    最近更新 更多