关于回调函数问题
- var setUser = function () {
-
function callback() {
-
sql.open(conn_str, function (err, conn) {
-
if (err) {
-
console.log("Error opening the connection!");
-
return;
-
}
-
conn.queryRaw("SELECT Username,Password FROM Users", function (err, results) {
-
if (err) {
-
console.log("Error running query!");
-
return;
-
}
-
for (var i = 0; i < results.rows.length; i++) {
-
console.log(results.rows[i][0].toString());
-
}
-
return results.rows[1][0].toString();
-
});
-
});
-
}
-
return callback();
- }
- exports.setUser = setUser;
- var users = require(’./dbCon.js’);
- console.log(users.setUser());
// node index.js the result: return is unfined console.log is ok. 能看懂不。。。求教
11 回复
代码格式化挺重要的,咋就这么不钻业捏~眼睛不好,花呀~编辑框已经提供了常见的样式~
疑问在哪?
他使用了高阶函数,首先外面少了一层函数调用;其次,return的数据到不了外层调用,undefined…闭包、异步及回调原理不太清晰吧^ ^
@DevinXian 我也是要测试ajaxIm的demo 才搞一下这个。麻烦求教一下。
for (var i = 0; i < results.rows.length; i++) { console.log(results.rows[i][0].toString()); }
这有结果吗?
我把你的代码稍微改改,NodeJS菜鸟风格- -正好今天写完年终总结,有点时间~~ 首先是db.js:
var setUser = function (callback) {//callback回调,数据库访问是异步操作,直接return会悲剧
sql.open(conn_str, function (err, conn) {
if (err) {
console.log("Error opening the connection!");
return callback(err);
}
conn.queryRaw("SELECT Username,Password FROM Users", function (err, results) {
if (err) {
console.log("Error running query!");
return callback(err);
}
for (var i = 0; i < results.rows.length; i++) {
console.log(results.rows[i][0].toString());
}
//return results.rows[1][0].toString();//这里return的是内层函数
callback(err, results);//使用回调获取数据,第一个参数表示异常
});
});
};
exports.setUser = setUser;
index.js:
var User = require('./db.js');
User.setUser(function(err, data){
//handle err...
//handle data
});//此处传入一个函数作为回调获取结果
@hades 有的。(忙在群里 没及时刷新)楼下的兄弟帮我解决了。thanku all the same
@DevinXian 谢谢。。我只想说 你们这年总结太及时了。虽然我没看懂。我研究研究 。。best wishes。
谢谢大家!
@cnhonker07 之前说少了一层调用说错了,代码中return callback()本身就调用了,我没看仔细,sorry,所以@hades 打印肯定会有的~
@DevinXian @.@其实我只是想说,他的回调没写,就你写的那句。
@hades 大哥啊。。你去看看我刚提问的一个问题。。跟这个不是差别很多。。。