2017-05-27 19 views
1

こんにちは、私はそこにオプションで簡単なブールを返すしたいと思います: を - 真:ユーザーはデータベース に存在する - 偽:ユーザーがいないデータベースに存在しない戻り値

ここでは私の非稼働ですコード:

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

リターン私はNodeJSは非同期に動作するように設計されていることを知っているが、非同期機能は私が何かを返すことはできません常にundefined です。私は立ち往生して、助けてください!

また、私は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

プログラムは、非同期呼び出しが呼び出されるのを待ってから続行します。しかし、はいreqとresはあまりにも動作する必要があります:) しかし、あなたはデータを使用してより複雑な操作を行う必要があります、私は非常にあなたが約束と非同期jsライブラリを参照することをお勧めします。 – Leon

+0

はい、私はついにプロミスを使用しました あなたの助けてくれてありがとう! –