我在重新學習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
來閱讀關於「持續傳遞樣式」的內容,這將大大增加你對此的理解。 –