Funzione di ritorno Javascript

Ho diversi problemi con il ritorno delle query.

Ecco cosa vorrei fare:

//If the email hasn't a good format if(email_not_good_format()) //I do something else if(email_already_exists_in_mysql(email)) //I do something function email_already_exists_in_mysql(email){ connection.query('SELECT COUNT(*) AS nb FROM user WHERE emailUser = ' + connection.escape(email), function(err, rows, fields) { if (err) throw err; if(rows[0].nb == 0) return false; else return true; }); } 

Ho visto su diversi post la funzione di callback ma non funziona per quello che voglio fare.

Ho visto su diversi post la funzione di callback ma non funziona per quello che voglio fare.

Sì, hai solo bisogno di cambiare il tuo modo di pensare al codice. Invece di scrivere email_already_exists_in_mysql dovresti invece scrivere una funzione chiamata if_email_already_exists_in_mysql :

 /* Executes callback if email * already exists in mysql: */ function if_email_already_exists_in_mysql (email,callback) { connection.query( 'SELECT COUNT(*) AS nb FROM user WHERE emailUser = ' + connection.escape(email), function(err, rows, fields) { if(rows[0].nb != 0) { callback(); } } ) } 

Quindi invece di scrivere questo:

 //If the email hasn't a good format if(email_not_good_format()) { //I do something } else if(email_already_exists_in_mysql(email)) { //I do something } 

lo scrivi invece in questo modo:

 //If the email hasn't a good format if(email_not_good_format()) { //I do something } else {if_email_already_exists_in_mysql(email),function(){ //I do something })} 

Ora, potresti chiedertelo, e se ci fosse un altro dopo di ciò? Bene, è necessario modificare la funzione if_email_already_exists_in_mysql per comportarsi come e if...else invece di just e if :

 function if_email_already_exists_in_mysql (email,callback,else_callback) { connection.query( 'SELECT COUNT(*) AS nb FROM user WHERE emailUser = ' + connection.escape(email), function(err, rows, fields) { if(rows[0].nb != 0) { callback(); } else if(else_callback) { else_callback(); } } ) } 

in modo che tu possa chiamarlo così:

 //If the email hasn't a good format if(email_not_good_format()) { //I do something } else { if_email_already_exists_in_mysql(email),function(){ //I do something }, // else function(){ //I do something else } )} 

Puoi scrivere codice asincrono per fare praticamente tutto ciò che il codice normale può fare solo invece di restituire un valore che passi in un callback. Ricorda:

ritorno in codice sincrono == passaggio di callback in codice asincrono.

La struttura del codice deve quindi essere diversa, ma come ho dimostrato sopra la logica che si desidera implementare può essere esattamente la stessa.