2017-05-27 84 views
1

你好,我想與有選擇返回一個簡單的布爾: - 真:用戶存在於數據庫 - 假:用戶不存在於數據庫返回值

這裏是我的非工作代碼:

database.users.get("test-username", function (err, value) { 
    if (err) { 
     return err; 
    } else { 
     return value; 
    } 
}) 

回報始終是undefined 我知道,是的NodeJS設計工作異步,但異步函數不允許我回去的東西。我卡住了,請幫忙!

此外,我使用LevelUP作爲數據庫系統。 (如果我的問題沒有解決方案,NodeJS中是否有其他數據庫系統允許同步?)

感謝社區!

回答

1

當你console.log你的回報? 例如:

function dbCall(){  
database.users.get("test-username",function(err, value){ 
    if(err){ 
      return false; 
    }else{ 
     console.log(value); 
     return value; 
    } 
} 
} 

,如果你得到一些有價值的東西,那麼你看不到任何回報的原因是因爲API調用是異步的。你必須承諾。

new Promise(resolve,reject){ 
    let data = dbCall(); 
    if(data == false) 
     reject(data); 
    else 
     resolve(data); 
} 
+0

當然,console.log在回調中工作,在回調之外沒有任何工作。 我發現了另一個解決方案,是用'req'和'res'參數(ExpressJS)調用函數,所以我可以在回調中直接用'res.send(response)'顯示響應 –

+0

它不起作用的原因是因爲在繼續之前,您的程序不會等待異步調用回調。但是,請求和資源也應該工作:) 但是,你需要做更復雜的操作使用數據,我強烈建議你看看承諾和異步js庫。 – Leon

+0

是的,我終於用Promise 感謝您的幫助! –