2013-10-18 107 views
0

我是節點js的新手,我正在爲模型使用貓鼬。從db返回數據的函數

我有一個函數namde檢查,它有一個isNameThere函數,它接收名稱字符串作爲參數。它檢查數據庫,並查找其設置的用戶,如果在此形同虛設this.isNameThere將返回true名字符串

var check= function() 
{ 

    this.nameIsThere = false; 

    this.isNameThere= function(name){ 

    userModel.find({firstname: name},function(err,result){ 

       if(result) 
       { 
        this.nameIsThere= true; 
       } 

       }) 

return this.nameIsThere; 
} 
} 

即使你猜上面的代碼將返回因爲名稱存在異步編程的本質。有沒有辦法執行返回isNameThereuserModel.find執行。或者針對這種情況的其他解決方案。謝謝大家。

回答

0

小心分號,你忘了一些。在JavaScript中把開頭括號放在函數頭的旁邊而不是在下一行也是很好的做法。

可以封裝DB呼叫這樣的功能:

function checkForName (callback) { 
    userModel.find({firstname: name}, callback); 
} 

checkForName(function (err, result) { 
    if (result) { 
     nameIsThere = true; 
     //do something else 
     ... 
    } 
}); 

畢竟,這是anychronous,所以你不會得到任何同步返回值。

還有另一種方法:承諾。一些庫爲你檢查出:

+0

感謝您的回覆,我的質詢isNameThere是一個功能,我打電話從其他文件這一功能,我希望isName有返回真/假結果。我想要做的主要事情是在userMode.find完成操作後執行isNameThere的返回,並檢查名稱是否存在。我需要回復真實或錯誤,這是我的觀點。 – SamSamet

+0

這不是它是如何工作的,沒有同步的方式。你唯一能做的就是使用回調函數作爲「isNameThere」函數的參數(參見我的代碼),並在獲得結果時調用該函數。 – luschn