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. MongoDBは、サブドキュメントの各キーを集計します

    2. 負荷テスト中にMongoDBが応答しないのはなぜですか?

    3. MongoDB:MongoDBシェルでコレクションのすべてのレコードを削除する方法は?

    4. 並べ替えによってnodejsがどのように生成されるか-mongodb検索ですが、動的メソッドを呼び出すことによって