0

この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);
    }

これを行う適切な方法は何ですか?

4

1 に答える 1

3

関数への参照を割り当てるのではなく、関数を呼び出しています。

あなたのコード

query.exec(query.exec(checkDuplicate(err, doc));

する必要があります

query.exec(query.exec(checkDuplicate));
于 2013-11-01T12:53:52.810 に答える