Javascript和女孩的callback – 两个问题

我刚刚冒险进入服务器端JavaScript的美妙世界,我仍然得到了asynchronous处理的窍门。 在搞了一个节点项目之后,我意识到这个javascript就像我以前的很多女朋友 – 他们不会callback。 无论如何,我希望有人能帮助我…这里的代码与下面的解释:

//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); } 

我想要发生的是从父函数返回的结果,然后由child函数执行一个callback运行结果。 我试过这个:

  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); } }); 

但是我不能在“调用函数”的callback函数中访问父函数返回的结果。

 function queryDb(connection, sql){ <--2 arguments queryDb(db.connection, "SELECT * FROM Clients", function(){ <-- passing 3 

你没有对第三个参数做任何事情,所以你的callback不会被调用。

和你的最后一个例子,这个调用是asynchronous的,所以你要做的是不会工作。

并修复代码来处理那个神秘的3参数。

 function queryDb(connection, sql, callback) { connect(connection, function () { connection.query(sql, function (err, results) { if (!err) { callback(results); end(connection); } else { throw err; } }); }); }