हां, ऐसा होता है, आपको कोड के बारे में सोचने के तरीके को बदलने की जरूरत है। लिखने के बजाय email_already_exists_in_mysql
इसके बजाय आपको 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();
}
}
)
}
फिर इसे लिखने के बजाय:
//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
}
इसके बजाय आप इसे इस तरह लिखते हैं:
//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
})}
अब, आप अपने आप से पूछ सकते हैं, यदि उसके बाद कोई और हो तो क्या होगा? ठीक है, आपको if_email_already_exists_in_mysql
को संशोधित करने की आवश्यकता है जैसा व्यवहार करने के लिए कार्य करता है और if...else
इसके बजाय सिर्फ और 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();
}
}
)
}
ताकि आप इसे इस तरह कह सकें:
//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
}
)}
आप कॉलबैक में पास किए गए मान को वापस करने के बजाय नियमित कोड केवल कुछ भी करने के लिए एसिंक कोड लिख सकते हैं। याद रखें:
वापसी सिंक्रोनस कोड में ==कॉलबैक . में पासिंग अतुल्यकालिक कोड में।
इसलिए कोड संरचना अलग होनी चाहिए, लेकिन जैसा कि मैंने ऊपर दिखाया है कि आप जिस तर्क को लागू करना चाहते हैं वह बिल्कुल समान हो सकता है।