2017-10-11 1 views
-1

関数内でグローバルレベルで変数を宣言しました。内部関数内で最終的に変数が変更され、変更された変数値を外部関数の値として返したいのですが、現在undefined.Plzガイダンスを提供。javascriptを使って外部関数から内部関数のプロパティにアクセスする方法

function checkResult(req){ 
    let result = true; 
    Reservation.find({result_date: req.body.res_date}, function (err,doc) { 
     if (err) {console.log(err);} 
     else if (reservations) { 
     result = false; 
     console.log(result);  
     } 
    }) 
    console.log("Final:"); 
    return result; // undefined error 
} 
+0

下に示して何ですか?最も重要なことは、非同期ですか? –

+1

[非同期呼び出しから応答を返すにはどうすればよいですか?](https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) – marvel308

答えて

0

コールバックを使用する必要があります。例えば

:その後、

function checkResult(req, callback){ 
    let result = true; 
    Reservation.find({result_date: req.body.res_date}, function (err,doc) { 
     if (err) {console.log(err);} 
     else if (reservations) { 
      result = false;  
     } 

     callback(result); 
    }) 
} 

そして、このような関数を使用します。

checkResult(req, function(result){ 
    console.log(result); // prints the boolean 
}); 
+0

例がうまくいく場合は、答えを受け入れることができますか? :) –

0

Reservation.findが完了時に呼び出されるコールバック関数に取るように見えます。 Reservation.findが非同期の場合、checkResultReservation.findに実行を開始するように指示してから、すぐにresult(つまりundefined)を返します。あなたの匿名関数function (err,doc)の内側にすべてが機能の実行の流れの外に起こるので、言い換えれば

return result;result = false;を実行しています。

コールバック内にresultが必要な操作(function (err,doc)ブロック)を実行してください。

編集:健二向井は何をreservation.findん

関連する問題