提问人:Sam 提问时间:11/16/2023 更新时间:11/16/2023 访问量:16
令人困惑的行为:Connection.query 返回空。除非从池中获取另一个连接并立即释放
Confusing behavior: Connection.query return empty. Unless another connection is got from the pool and released immediately
问:
下面我粘贴了一个验证和批准 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;
}
}
答: 暂无答案
评论