sql >> Databáze >  >> NoSQL >> MongoDB

Jak zajistit provedení asynchronního volání před návratem z funkce v Mongoose?

Měli byste stále používat async ale potřebujete async.waterfall pro to. Zde je to, co musíte zvážit:

Hlavní metoda pro volání async funkce:

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

Pak potřebujete, aby vaše funkce byly async přátelský, to znamená, že byste měli používat zpětná volání a předávat svá data z jedné funkce do druhé. Něco takového:

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

Pak byste měli volat své funkce ve vaší hlavní metodě:

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

A to je vše, máte 3 funkce, které by se měly provádět jedna po druhé a není potřeba žádné zpětné volání.



  1. MongoDB Index na různých typech

  2. Jak třídit dílčí dokumenty v poli pole?

  3. Jak vytvořit zákazníka i kartu v jediné akci s Stripe?

  4. PHP intl.so selže