我是新來的NodeJS,我不正確地理解如何運作異步工作異步功能。我今天讀了很多關於他們的文章,但我無法解決我的問題。如何妥善處理的NodeJS
我用Sequelize.js作爲ORM,我的問題是,當我巢查詢到其他查詢的回調,然後我不能強迫只有當查詢結束它繼續。
這裏是我當前的代碼:
io.on('connection', function (socket) {
socket.on('join', function (data) {
clients[clients.length] = new Client("Client " + clients.length, data.channel);
console.log('Client connected Channel: ' + clients[clients.length-1].channel);
var array = []
DB.Matches.findAll({attributes: ['matchId', 'teamAId', 'teamBId']}).then(function (result) {
for (var i = result.length - 1; i >= 0; i--) {
DB.Teams.findAll({where: { team_id: [result[i].teamAId,result[i].teamBId]}}).then(function (teams) {
array.push({ id: 0, name: teams[0].clubName + ' - ' + teams[1].clubName});
}).then(function() {
// Now my emit event is here but I dont want to run every time the loop run
console.log(array);
socket.emit('matches', array);
});
}
}.then(function() {
// I tried to put it here, but then I got an empty array, because the queries haven't finshed yet
}));
});
});
當該代碼被調用時,陣列將在每一個循環在一個更多元的每一個迴路可以emited,但這不是爲我好。當數組完全填充時,我想調用emit事件一次。
[標籤:sequelize.js]不具有'DB.Matches.findAll({屬性:[ 'matchId', 'teamAId', 'teamBId']})'方法。請閱讀文檔[here](http://docs.sequelizejs.com)。 –
DB.Matches和DB.Teams是必需的()模式等: 'module.exports =函數(sequelize,Sequelize){ 變種模塊= {}; 模塊= sequelize.define( 'tbl_team',{ blablabla });返回模塊; };' – NoNameProvided