2017-10-11 6 views
-1

j'ai déclaré la variable au niveau mondial en fonction, qui finissent par être changé au sein de la fonction intérieure et je veux revenir valeur de la variable changé en tant que valeur de la fonction extérieure, mais actuellement obtenir undefined.Plz fournir des conseils.Comment accéder aux propriétés de la fonction interne de la fonction externe avec le 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

Que fait reservation.find? Plus important encore, est-ce asynchrone? –

+1

double possible de [Comment renvoyer la réponse d'un appel asynchrone?] (Https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) – marvel308

Répondre

0

Vous devez utiliser le rappel.

Par exemple:

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

Et puis utilisez la fonction comme ceci:

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

Si l'exemple vous convient, pouvez-vous accepter la réponse? :) –

0

Reservation.find semble prendre dans un rappel qui est appelé à la fin. Si est asynchrone, alors checkResult indique Reservation.find pour commencer l'exécution, puis renvoie immédiatement result (undefined).

En d'autres termes, return result; est l'exécution avantresult = false; parce que tout à l'intérieur de votre fonction anonyme function (err,doc) se produit hors de l'écoulement de l'exécution de la fonction. Essayez d'effectuer toute action nécessitant result dans votre rappel (le bloc function (err,doc)).

Éditer: ce qui est ce que Kenji Mukai montre ci-dessous