2016-07-12 4 views
-1

私は約束したように使用しましたが、まだ私はconsole.logの配列を使用できるという問題があります。ここノードjをどのように同期させることができますか?

は私がやったことです:

exports.getData = function(request, response) { 

    userEmail = request.body.user; 

function delay(ms){ // takes amount of milliseconds 
    return new Promise(function(resolve, reject){ 
    setTimeout(function(){ // when the time is up 
     resolve(); // change the promise to the fulfilled state 
    }, ms); 
    }); 
} 

    Wish.find({userEmail}).exec(function(err, docs) { 
     //console.log("docs "+docs); 
     var wishArray = new Array(); 


      for (var i=0; i<docs.length; i++) { 
      if (docs[i].sub=='party') { 
       var id = docs[i].num; 
       delay(100).then(function(){ 
        Party.find({id}).exec(function(err, details) { 
         console.log("5"); 
        wishArray.push(details); 
       }); 
      }); 
      } 
     } 
    }); 
    delay(700).then(function(){ 
    console.log(wishArray); 
}); 

} 

私は大きな第2遅延の数を作る試みたが、それは動作しませんでした。 どうすればいいですか?

+0

あなたは2つの 'console.log(wishArray);を持っています最初のものは正しく動作します – Iceman

+0

2番目のものは正常に動作していません私は配列が空でないことを確認できます... – user3488862

答えて

2

wishArrayが完全に読み込まれるまでログを残すことはできません。

exports.getData = function(request, response) { 
userEmail = request.body.user; 

Wish.find({userEmail}).exec(function(err, docs) { 
    console.log("docs "+docs); 
    var wishArray = new Array(); 
    for (var i=0; i<docs.length; i++) { 

     if (docs[i].sub=='party') { 
      console.log("--------------------"); 
      var id = docs[i].num; 
      Party.find({id}).exec(function(err, details) { 
       wishArray.push(details); 
        if(wishArray.length == docs.length){ 
         console.log(wishArray); 
        } 

      }); 
     } 
    } 
    console.log("***************************"); 

}); 

}

他の多くの複雑なユースケースの人々は延期クエリの配列を使用していました。あなたのケースは配列の長さだけで把握できる単純なケースです。

+1

これは待ちません。私は約束()を提案する。 – Iceman

+0

@Icemanどのようにして両方の機能が動作するのですか? – user3488862

+0

@ user3488862約束を使って私に20分を与え、悪い回答を投稿する。遅れて申し訳ありません。 – Iceman

関連する問題