MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да се гарантира, че асинхронно повикване се изпълнява, преди да се върнете от функция в Mongoose?

Все още трябва да използвате async но имате нужда от async.waterfall за това. Ето какво трябва да имате предвид:

Основен метод за извикване на вашия async функция:

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

След това трябва вашите функции да бъдат async приятелски, това означава, че трябва да използвате обратни извиквания и да предавате данните си от една функция на друга. Нещо подобно:

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

След това трябва да извикате функциите си във вашия основен метод:

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

И това е всичко, имате 3 функции, които трябва да се изпълняват една след друга и не е необходимо обратно извикване.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Запитване за подполе в documentdb

  2. Групово вмъкване в MongoDB с помощта на mongoose

  3. как да използвам mapreduce в поддокумент на заявка mongoose/mongodb?

  4. Как да преименувам полета при извършване на търсене/проекция в MongoDB?

  5. Mongoose Virtuals в MongoDB Aggregate