このIDを持つmongodbにエントリがある場合、配列内の各IDをチェックするasync.waterfall内に関数を作成しようとしています(Mongooseを使用)。ID が既に存在する場合は、配列から削除されます。次の関数を書きました。
function(eventIds, callback) {
// check for duplicates
for (var i = 0; i < eventIds.length; i++) {
var query = Party.find({
fbEventId: eventIds[i]
});
query.exec(function(err, doc) {
if (err) return console.log(err);
if (doc) {
// remove i from array
console.log(doc);
}
});
}
callback(null, eventIds);
}
ただし、新しい関数が for ループで構築されるため、これは警告を発します。
以下のように for ループの外側に関数を作成すると、エラーが発生します: ReferenceError: err is not defined.
function(eventIds, callback) {
// check for duplicates
function checkDuplicate(err, doc) {
if (err) return console.log(err);
if (doc) {
// remove i from array
console.log(doc);
}
}
for (var i = 0; i < eventIds.length; i++) {
var query = Party.find({
fbEventId: eventIds[i]
});
query.exec(checkDuplicate(err, doc));
}
callback(null, eventIds);
}
これを行う適切な方法は何ですか?