I’m greeting everyone,
after learning more about NodeJS and mysql, i run into synchronizing problems. I want to avoid using async&await and to rarely use try&catch instead keep on .then() and .catch(), but I having my issues with multiple _async
Here is the relevant code:
“`
const playersData = {};
const subjectFactors = {};
const dbpool = mysql.createPool({…, multipleStatements:true});
function query(sql) {
return new Promise((resolve, reject) =>{
try {
dbpool.query(sql, (err, result) => {
if (err){
return reject(err)
}
return resolve(result)
});
}
catch(event) {
reject(event)
}
})
}
function getPlayerSubjects(request, subjectResults) {
const playerSubjects = {};
for(const subjectResult of subjectResults) { // for all units
if(subjectResult.boolval) { // simple boolean evaluation
query(‘SELECT * FROM ranks WHERE rank_id=’+subjectResult.start+’;’
+’ SELECT * FROM ranks WHERE rank_id=’+subjectResult.end)
.then((startEndResults) => { // when both sqls done
if(breaksThreshold(playerRank, (startEndResults[1][0].position-startEndResults[0][0].position)*subjectResult.part) { // simple function evaluation
subjectResult[‘subject_subs’] = [];
playerSubjects[subjectResult[‘subject_id’]] = query(‘SELECT * WHERE subsubject_subject_id=’+subjectResult[‘subject_id’])
.then((subsubjectResults) => {
for(const subsubjectResult of subsubjectResults) {
updateFactorsOfPlayer(subjectResult[‘subject_player_id’], subsubjectResult[‘subsubject_subject_id’],);
subjectResult[‘subject_subs’].push(subsubjectResult);
}
});
playerSubjects[subjectResult[‘subject_id’]] = subjectResult;
}
});
}
}
return {subjects:playerSubjects, subjectFactors:subjectFactors};
function getPlayerData(request, playerResults) {
return {friends:getPlayerFriends(request, playerResults[0]), …getPlayerSubjects(request, playerResults[1])}; // build event data structure
}
function sendPlayerEvent(request, response) {
query(‘SELECT * FROM ranks’
+’; SELECT * FROM subjects’)
.then((playerResults) => {
getPlayerData(request, playerResults)
.then((currentPlayerData) => {
if(notEqual(playersData[request.query.id], currentPlayerData)) { // data has changed
playersData[request.query.id] = currentPlayerData; // set new player data
response.write(`data: ${JSON.stringify({player:playersData[request.query.id]})}nn`);
}
});
})
.catch((error) => {
console.error(error);
});
}