我在重新学习Javascript和上周的过程中编写这些代码为大学任务,我认为有可能是执行此代码的JavaScript Node.js的回调函数,变量的作用域问题
app.get('/member/all', function(req, res) {
connection.query('CALL GetAllMembers()', function(err,rows){
connection.query('CALL CountMembers()', function(err, allMembers){
console.log(err);
connection.query('CALL CountAllIndMembers()', function(err,indMembers){
console.log(err);
connection.query('CALL CountInactiveMembers()', function(err,inactiveMembers){
console.log(err);
connection.query('CALL CountAllMembersInGroups()', function(err,groupMembers){
console.log(err);
res.render('members', {members : rows[0], title : "All Members", groupMembers : groupMembers[0][0].AllGrpMembers,
inactiveMembers : inactiveMembers[0][0].AllInactiveMembers, indMembers : indMembers[0][0].AllIndMembers,
allMembers : allMembers[0][0].AllMembers, statistics : true});
});
});
});
});
});
});
});
的更好的方法时,
当我试图在app.get
下声明变量时,例如var allMembers
...执行回调时,我无法设置allMembers = rowsFromTheCallback
。它似乎是这个回调的局部变量。我相信这与变量范围和/或提升有关。只是想问问你们,即使这个功能起作用,是否还有更好的方法来做到这一点。看哈哈是非常丑陋的!
预先感谢
杰克
使他们的所有功能,而不是全部匿名呼叫! –
代码的丑陋是节点回调的不幸副作用。我会建议看看涉及生成器的东西(yield关键字而不是回调),但不知道是否足够稳定以便在Node中使用。如果你想要更传统的东西,你可以看看像async.js这样的库,或者使用Promises – hugomg
来阅读关于“持续传递样式”的内容,这将大大增加你对此的理解。 –