mysql - nodejs中的多个依赖mysql查询......承诺不是答案吗?
问题描述
我最近学习了如何执行 Promise 以同步运行三个 mysql 请求。我很失望,因为我知道如果我想按顺序运行相关的 mysql 请求,这不是解决方案。例如,第一个获取一个变量,第二个需要该变量:
我的nodejs代码:
data.used_time = 7;
var sql;
var sesh_save_val;
var mysql = require('mysql');
//Delete whiteboard session
var con = mysql.createPool({
connectionLimit: 15,
host: "xxxx",
user: "xx",
password: "xxxx",
database: "xxxx"
});
var current_min;
new Promise ((resolve,reject) => {
sql = `SELECT minutes FROM Students WHERE sesh_save = (?)`;
con.query(sql, id, function (err, result)
{
if (err) throw err;
current_min = result[0].minutes;
console.log("no error thrown I think..");
console.log("current_min: " + current_min);
});
resolve("did first func");
}).then((val)=> {
console.log(val);
sql = 'UPDATE Students SET minutes = (?) WHERE sesh_save = (?)';
var min_left = current_min - data.used_time;
console.log("used time: " + data.used_time + " ");
console.log("min_left: " + min_left + " " + "id: " + id);
con.query(sql,[min_left, id], function (err, result)
{
if (err) {console.log(err);}
});
return "did second func";
});
输出只是我所期望的部分。这是:
"did first func", "used_time: 0", min_left: NaN, id: whiteboard-xxxxx-xxxx
"did second func"
"current_min: 4299"
然后错误就行了,"con.query(sql,[min_left, id], function (err, result)"
因为 min_left 不存在。为什么 min_left 不存在?输出显示 current_min 存在。但是,它在第一个 mysql 查询解决之后就存在了,这花了很长时间,以至于我们能够进入第二个 .then 语句,而第一个 sql 查询仍然需要时间,而第二个依赖的 mysql 语句不能正确处理。我该如何解决?
感谢您的任何评论。
解决方案
您实际上并不需要 2 个查询。你会很高兴:
sql = 'UPDATE Students SET minutes = minutes - (?) WHERE sesh_save = (?)';
con.query(sql,[data.used_time, id], function (err, result)...
推荐阅读
- java - 使用 @ResponseBody 注释做出响应时的额外字符
- android - 从android中的城市和国家获取时区ID
- python - Scrapy 获取跨越多行和嵌套元素内的文本
- python - Emacs:自动填充模式 - 如何更改行尾字符?
- html - 谷歌地图有额外的宽度
- apostrophe-cms - Apostrophe CMS:在嵌套连接中获取片段数据(joinByArray – joinByOne)
- javascript - 使用 kepresses 和 if 语句来启用和禁用元素
- assembly - 如何在装配臂中打印多个字符串?
- javascript - 使用 Ionic 4 Angular Fire Auth 保护的无限 console.logging
- azure - 创建函数应用时出现“此区域不允许此订阅的缩放操作”错误