小弟最近在练习node js 但总是遇到一个问题不知道该怎么解决 是关于callback的问题 举个例子来说 mysql 模塊中對mysql下query
var rs; connection.query(‘SELECT 1 + 1 AS solution’, function(err, rows, fields) { if (err) throw err; rs = rows; console.log('The solution is: ', rows[0].solution); });
根据官方文件 返回的结果 会传给rows 但我在外面宣告一个变数去里面把rows传给他 但之后console看却是undefine 不确定是不是callback函数的范围问题
如果我想要对结果作处理一定要在callback里面做吗? 得到的结果可以传出来吗?这个地方我一直有问题观念不是很懂 所以来这边请教一下各位
@leesin11 这就是nodejs的异步编程特性。听我的,做一个小的测验。
connection.query(‘SELECT 1 + 1 AS solution’, function() { console.log(‘我在回调里’); }); console.log(‘我在回调外,回调什么的最讨厌了,我等不及了,我要滚蛋了’);
你执行这个脚本,看到结果你就明白了。
请叫我雷锋
所以应该是外面的控制台先执行了之后里面的给值才执行 所以其实我的变数最后是我想要的结果 那要如何让他执行完再继续执行呢? 有爬了一些文旦还是有点不清楚 感谢
把你对rs
的处理放到callback里面,而不是callback外面。
rows 应该放在cb里面吧,我之前和你遇到的问题一样,后来放到了cb里就完美解决了。
cb is hell
connection.query('SELECT 1 + 1 AS solution’, function(err, rows, fields) { if (err) throw err; xcall(rows) }); function xcall(rows){ console.log(rows); } //用CB的正确姿势