2013-07-23 198 views
0

我有幾個問題返回查詢。返回功能Javascript

在這裏,我想這樣做:

//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; 
    }); 
} 

我看到了不同崗位的回調函數,但它並不適用於我想要做的工作。

+0

對JS的異步工作看看承諾。你有用於node.js的Q庫。 – TMichel

+2

對'.query'的調用是* asynchronous *。這就是爲什麼你必須提供回調。看看這個問題,瞭解問題和潛在的解決方案:http://stackoverflow.com/q/14220321/218196(即使它是關於Ajax,同樣的原則適用)。 –

+0

@TMichel你得到任何錯誤。 – sachin

回答

0

我看到了不同的帖子回調函數,但它不適合我想要做的。

是的,你只需要改變你對代碼的思考方式。而不是寫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 
    } 
)} 

您可以編寫異步代碼做幾乎任何常規的代碼只能做,而不是返回你在回調中傳遞的值。記住:

同步碼返回 ==傳遞回調在異步代碼。

因此,代碼結構必須不同,但正如我上面演示的那樣,您要實現的邏輯可以完全相同。

+0

謝謝你:)現在在我心中一切都好:=)謝謝! – TWEESTY