[英]Node.js line skipped and then processed
While debugging the code I noticed that the line 4 is getting skipped and then processed after line 5 & 6.在调试代码时,我注意到第 4 行被跳过,然后在第 5 行和第 6 行之后处理。
1 router.post(routes.availability, function (req, res) {
2 const sqlClient = require('../framework/db/mysql');
3 var query = "Select 1 as 'data' from dual;";
4 var result = sqlClient.execute(query);
5 res.send(toString(result));
6 res.end();
7 })
The below gets executed at line 4.下面在第 4 行执行。
execute(sql) {
this.db.query(sql, function (err, results) {
if (err) {
logger.log("error", err);
return null;
}
if (results.length)
return results;
return null;
});
}
Can someone please explain why and provide a solution?有人可以解释原因并提供解决方案吗?
this.db.query
is a async function, you should await until it completed this.db.query
是异步 function,您应该等待它完成
1 router.post(routes.availability, async function (req, res) {
2 const sqlClient = require('../framework/db/mysql');
3 var query = "Select 1 as 'data' from dual;";
4 var result = await sqlClient.execute(query);
5 res.send(toString(result));
6 res.end();
7 })
async function execute(sql) {
return await this.db.query(sql, function (err, results) {
if (err) {
logger.log("error", err);
return null;
}
if (results.length)
return results;
return null;
});
}
You can use this你可以用这个
Unlike the other lines, line 4 executes a database query which works asynchronously and follows the callback pattern .与其他行不同,第 4 行执行一个异步工作的数据库查询,并遵循回调模式。 One way to defer the response until the database query is done is to make
execute
function follow the callback pattern too:将响应推迟到数据库查询完成的一种方法是让
execute
function 也遵循回调模式:
execute(sql, callback) {
this.db.query(sql, function (err, results) {
if (err) {
logger.log("error", err);
return callback(err)
}
if (results.length)
return callback(null, results);
return callback();
});
}
In this way you can pass the database query result as an argument to the callback and return the response to HTTP request inside that callback:通过这种方式,您可以将数据库查询结果作为参数传递给回调,并在该回调中返回对 HTTP 请求的响应:
router.post(routes.availability, function (req, res) {
const sqlClient = require('../framework/db/mysql');
var query = "Select 1 as 'data' from dual;";
sqlClient.execute(query, (err, result) => {
if (err) {
return res.status(500).send("Error")
}
res.status(200).send(toString(result))
});
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.