首页 > 解决方案 > 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 语句不能正确处理。我该如何解决?

感谢您的任何评论。

标签: mysqlnode.js

解决方案


您实际上并不需要 2 个查询。你会很高兴:

sql = 'UPDATE Students SET minutes = minutes - (?) WHERE sesh_save = (?)';
con.query(sql,[data.used_time, id], function (err, result)...

推荐阅读