0

クエリがいくつか.find()ありますが、すべてのコールバックが完了するのを待つ良い方法がわかりません。

つまり、コールバック関数ごとにカウンターを作成してインクリメントし、変更されるたびにチェックすることもできますが、これは本当に面倒だと感じています。

async次に、やのようなライブラリがいくつかありますが、いくつかのコールバックを待つためだけQにそれらを使用するかどうかはよくわかりません。

ですから、私の質問は次のとおりです。同じ問題に苦しんだことがありますか?どのように修正しましたか?

4

1 に答える 1

2

コールバックが呼び出されるたびに増加するカウンターを持つことは汚いことではありませんが、ほとんどのライブラリが背後で何らかの形で行うことです。ただし、これは async を使用していくつかのコールバックを待機する 1 つの方法です。

async.parallel({
  ppl: Person.find.bind(Person, { status: 1 }),
  catz: Cat.find.bind(Cat, { meow: 2 })
},
function (err, result) {
  console.log(result.ppl, result.catz);
});

.bind() は、次のショートカットです。

function (next) {
  People.find({ status: 1}, next);
}

状況に応じて、代わりに async.series、.each、または .waterfall を使用することができます。

于 2013-09-10T11:29:50.533 に答える