作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚涉足服务器端 javascript 的奇妙世界,但仍然掌握异步处理的窍门。在弄乱了一个 Node 项目之后,我开始意识到这个 javascript 就像我过去的很多女朋友一样——他们只是不会回电。不管怎样,我希望有人能帮助我……这是代码,下面有解释:
//this is the function I'm calling to
function queryDb(connection, sql){
connect(connection, function(){
connection.query(sql, function(err, results){
if(!err){
return results;
end(connection);
}
else{
throw err;
}
});
});
}
这是我打电话的地方。在调用之后我想要执行一些代码,但直到这个函数完成处理(它实际上是对数据库的查询,所以需要更长的时间并且我的 js 继续运行)。
var queryResults = db.queryDb(db.connection, "SELECT * FROM Clients");
if(queryResults){
console.log(queryResults);
req.dbResults = queryResults;
next();
}
else{
console.log('The query results where not returned here is the queryResults variable: ' + queryResults);
}
我希望发生的事情是从父函数返回结果,然后由子函数运行一个回调函数来处理结果。我试过这个:
queryDb(db.connection, "SELECT * FROM Clients", function(){
if(results){
console.log(results);
req.dbResults = results;
next();
}
else{
console.log('The query results where not returned here is the queryResults variable: ' + results);
}
});
但是我在“调用函数”的回调中访问不到父函数返回的结果。
最佳答案
function queryDb(connection, sql){ <--2 arguments
queryDb(db.connection, "SELECT * FROM Clients", function(){ <-- passing 3
你没有对第三个参数做任何事情,所以你的回调不会被调用。
在你的最后一个例子中,调用是异步的,所以你试图做的事情是行不通的。
并修复代码以使用那个神秘的 3 参数。
function queryDb(connection, sql, callback) {
connect(connection, function () {
connection.query(sql, function (err, results) {
if (!err) {
callback(results);
end(connection);
} else {
throw err;
}
});
});
}
关于Javascript 和女孩的回调——两者的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13886727/
我是一名优秀的程序员,十分优秀!