当前位置: 首页 > 知识库问答 >
问题:

在SQL查询中使用promise?

唐景山
2023-03-14

我有一个API调用,它需要从MySQL数据库中提取一些信息,以便完成请求。问题是,NodeJS不会等待查询响应,我已经尝试用承诺来解决这个问题。下面是我的代码:

app.post('/placeOrder', function (req, res) {
  var username = decryptAccessToken(req.body.AuthToken);
  console.log(username);
   con.query("INSERT INTO Orders SET ?", fetchCustomerInfo(username, req.body.orderInfo), function (err, response) {
     if (!err) {
      console.log("Order successfully placed");
      res.send("Order successfully placed");
     } else {
       console.log(err);
     }
   });
 });
 async function fetchCustomerInfo(username, orderInfo) {
  const query = new Promise((resolve, reject) => {
    con.query("SELECT FirstName, LastName, Address, Email, Phone FROM Customers WHERE Email=?", username, function (err, response) {
      var createOrder = {
        FirstName: response.FirstName,
        LastName: response.LastName,
        Address: response.Address,
        Email: response.Email,
        Phone: response.Phone,
        ProductInfoJSON: orderInfo
      }
      console.log(createOrder);
      resolve();
      return createOrder;
    })
  })
  await query;
  return query;
 }

这个FetchCustomerInfo函数将返回Promise对象,这将触发SQL语法错误,因为这不是预期的数据库输入。我做错了什么?任何建议都非常感谢。

共有1个答案

华星文
2023-03-14

试试看:



app.post('/placeOrder', async function (req, res) {
    var username = decryptAccessToken(req.body.AuthToken);
    console.log(username);
    var firstQuery = await fetchCustomerInfo(username, req.body.orderInfo);
    con.query("INSERT INTO Orders SET ?", firstQuery, function (err, response) {
        if (!err) {
            console.log("Order successfully placed");
            res.status(200).send("Order successfully placed");
        } else {
            console.log(err);
            res.status(500).send("Error!");
        }
    });
});
function fetchCustomerInfo(username, orderInfo) {
    return new Promise((resolve, reject) => {
        con.query("SELECT FirstName, LastName, Address, Email, Phone FROM Customers WHERE Email=?", username, function (err, response) {
            var createOrder = {
                FirstName: response.FirstName,
                LastName: response.LastName,
                Address: response.Address,
                Email: response.Email,
                Phone: response.Phone,
                ProductInfoJSON: orderInfo
            }
            console.log(createOrder);
            resolve(createOrder);
        })
    })
}
 类似资料:
  • 问题内容: 我对Oracle SQL查询并不十分了解,因此在删除表中的某些行时遇到了一个问题,该行必须满足一个约束,该约束包括另一个(联接)表的字段。换句话说,我想编写一个查询来删除包括JOIN的行。 在我的情况下,我有一个表和另一个连接在字段上的表。我想从大于或等于200的行中删除行,并且它们引用的产品具有名称“ Mark”(名称是“产品”中的一个字段)。 我想首先被告知Oracle中的Dele

  • 问题内容: 我在应该是一个非常简单的脚本方面遇到了麻烦。我只是想使用Python pyodbc模块创建一个新的SQL Server数据库。当我在SQL Server2012中执行该参数时,我尝试传递的“ sqlcommand”参数完美运行,但是此python脚本失败了。不知道出了什么问题,有人有什么想法吗? 和错误: 问题答案: 是SQL Server ManagementStudio中的批处理终

  • 问题内容: 我有一个很大的Excel工作表,看起来与此类似: 我要做的是创建一个新的动态生成的表格,其中显示了所有人员。 在SQL中,这将是同步:。我以前从未在excel中使用过VBA(我是一位经验丰富的PHP / Javascript程序员,并且已在MS Access中使用过VBA),所以我正在寻找初学者的指导以帮助我入门。也许有人可以推荐一个简单的教程或博客文章,其功能类似于我需要做的事情?

  • 问题内容: 我们正在尝试为本地sql查询动态生成IN子句以返回JPA实体。Hibernate是我们的JPA提供程序。我们的代码看起来像这样。 这是行不通的,in子句无法识别通过这种方式传入的任何值。有谁知道解决这个问题的方法吗? 问题答案: 在您的情况下,JPA支持命名列表参数:

  • 问题内容: 我对Doctrine Symfony中SQL查询的翻译有疑问。我想做这样的事情: 在此示例中,我搜索用户99的所有朋友。 My tables : Member: (id, name, visible) Friend: (id, id_member, id_friend, active) 精度:我想使用Symfony传呼机。 一个解法 ?谢谢 ! 问题答案: DQL不支持UNION,但是

  • 为了给出backfround,我使用