令人困惑的行为:Connection.query 返回空。除非从池中获取另一个连接并立即释放

Confusing behavior: Connection.query return empty. Unless another connection is got from the pool and released immediately

提问人:Sam 提问时间:11/16/2023 更新时间:11/16/2023 访问量:16

问:

下面我粘贴了一个验证和批准 PayPal 订单的函数。一段时间以来,我一直在尝试解决一个问题,其中第一个查询只是无缘无故地返回一个空的 []。我认为这可能是比赛条件的问题,但我不知道。 有趣的是,当我快速从池中获取连接并立即释放它时,查询确实有效。 我很想解释为什么会发生这种情况...... TL;博士: 查询仅在获取和释放连接之前的连接时才有效。

async function validateAndApproveOrder(paypal_id, status, accessToken) {
    const sql = "SELECT total_price FROM Orders WHERE paypal_id = ?"
    const sqlTwo = "UPDATE Orders SET order_status = 'Processing' WHERE paypal_id = ?"
    const url = `${baseURL.sandbox}/v2/checkout/orders/${paypal_id}`;
  
    const response = await fetch(url, {
      method: "GET",
      headers: {
      "Content-Type": "application/json",
      "Authorization": `Bearer ${accessToken}`,
      }
    })
    const data = await response.json();
    const payment = data.purchase_units[0].amount.value;
    
    connection.getConnection((err, connect) => {
      connect.release();
    })
    if(data.status === "COMPLETED" && data.intent === "CAPTURE" && status === data.status) {
      return new Promise((resolve, reject) => {
        connection.getConnection((err, connection) => {
          if(err) {
            connection.release();
            reject("connection error while validating: " + err);
          }
          console.log("pid: ", paypal_id);
          connection.query(sql, [paypal_id], (err, results) => {
            if(err) {
              connection.release();
              reject("query error while validating: " + err);
            }
            console.log("results: " + JSON.stringify(results));
            let price;
            if(results.length > 0) {
              const unconverted = results[0].total_price;
              price = unconverted.toFixed(2);
            }

            if(payment === price) {
             connection.query(sqlTwo, [paypal_id], (err) => {
              if(err) {
                connection.release();
                reject("query error while validating: " + err);
              }
              connection.release();
              resolve("OK");
             }) 
            }
          })
        })
      })
    } else {
    console.error("Verification Error: " + data.status + " -- " + status + " -- " + data.intent)
      return;
    }
}

JavaScript 的MySQL

评论


答: 暂无答案