sql >> Database >  >> NoSQL >> MongoDB

Hoe zorg je ervoor dat een asynchrone aanroep wordt uitgevoerd voordat je terugkeert van een functie in Mongoose?

Je moet nog steeds async gebruiken maar je hebt async.waterfall nodig daarom. Hier is wat u moet overwegen:

Een hoofdmethode om uw async . aan te roepen functie:

var getInformation = function(){
  async.waterfall([
    //Array of your functions in order, we will be back here later
  ], function (err) {
       if(err){
         console.log(err);
       }else{
         console.log('Everything OK!');
     }
  );
}

Dan moet je functies async zijn vriendelijk, dat betekent dat u callbacks moet gebruiken en uw gegevens van de ene functie naar de andere moet geven. Zoiets als dit:

function findUser(callback){
  //Do something
  if('Everything OK'){
    callback(err, yourData); //err should be null if everything is OK and yourData should be the data that you wanna use in your next function. e.g. schoolId 
  }else{
    callback(err); //Something was wrong, "err" should have something different to null
  }
}

function findSchool(callback, schoolId){ //Note that we receive the parameter schoolId here but not in the first function
  //Do something
  if('Everything OK'){
    callback(err, yourData); //err should be null if everything is OK and yourData should be the data that you wanna use in your next function. e.g. schoolName 
  }else{
    callback(err); //Something was wrong, "err" should have something different to null
  }
}

function findStudents(callback, schoolName){
  //Do something
  if('Everything OK'){
    callback(err); //err should be null if everything is OK if this is the last function maybe we don't need to send back more data from here 
  }else{
    callback(err); //Something was wrong, "err" should have something different to null
  }
}

Dan zou u uw functies in uw hoofdmethode moeten aanroepen:

var getInformation = function(){
  async.waterfall([
    findUser,
    findSchool,
    findStudents
    //Note that there is no need to tell the functions the parameters they are sending or receiving here
  ], function (err) {
       if(err){
         console.log(err);
       }else{
         console.log('Everything OK!');
     }
  );
}

En dat is het, je hebt 3 functies die na elkaar moeten worden uitgevoerd en er is geen callback-hel nodig.



  1. Serverdetectie en -bewakingsengine is verouderd

  2. Waarom is MongoDB zo snel?

  3. Zoeken naar object in Mongoose Sub Array

  4. OpenShift Toegang tot Mongodb Pod vanuit een andere Pod