1

助けてくれてありがとう...これを適切に処理する方法に苦労しています。コールバックを適切に書く能力をあきらめて、今は非同期です。一連の乱数 (各レコード) を渡し、それらをマングース呼び出しに渡すスニペットがあります。渡した複数のクエリからデータセットを作成しようとしています。

私の問題は、4時間何をしても、「newarray」変数が常に空であることです。

ご協力ありがとうございました -

async.forEach(arLimit, function(eachrecord, callback){

  newarray = new Array;

  var query = UGC_DB_Model.find({}).skip(eachrecord).limit(-1);

  query.execFind(function (err, data) {
    if (err)
      console.log(err);
    else {
      newarray.push(data);
    }
  });

   callback(null, newarray);

}, function(err, result) {
  if (err) return next(err);
      console.log("(it's empty): " + result); 
}); 
4

1 に答える 1

2

コードにはいくつかの問題があります。

  • async.forEach結果を「生成」することを意図したものではありません。それasync.mapが目的です。
  • execFindコールバックを呼び出した直後ではなく、完了したときにのみコールバックを呼び出す必要があります。
  • あなたnewarrayはおそらく必要ありません。

代わりにこれを試してください:

async.map(arLimit, function(eachrecord, callback){

  var query = UGC_DB_Model.find({}).skip(eachrecord).limit(-1);

  query.execFind(function (err, data) {
    if (err)
      callback(err); // pass error along
    else {
      callback(null, [ data ]);
      // although I think you mean this (because 'data' is probably an array already)
      //   callback(null, data);
    }
  });

}, function(err, result) {
  if (err) return next(err);
  console.log("(it's empty): " + result); 
}); 
于 2013-11-10T09:28:51.740 に答える