sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan sikrer man, at et asynkront opkald udføres, før man vender tilbage fra en funktion i Mongoose?

Du bør stadig bruge async men du har brug for async.waterfall for det. Her er hvad du skal overveje:

En hovedmetode til at kalde din async funktion:

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

Så skal dine funktioner være async venlig, det betyder, at du skal bruge tilbagekald og give dine data fra en funktion til en anden. Noget som dette:

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

Så skal du kalde dine funktioner i din hovedmetode:

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

Og det er det, du har 3 funktioner, der skal udføres efter hinanden, og ingen tilbagekaldshelvede er nødvendig.



  1. Hvad er den mest effektive node.js inter-proces kommunikationsbibliotek/metode?

  2. Vælg baseret på tidsstempel og opdater tidsstempel med nul

  3. Er der en måde at forhindre MongoDB i at tilføje flertalsform til samlingsnavne?

  4. hvordan man konfigurerer debezium-felter sendt ved opdateringsbegivenheder (mongo-stik)