簡體   English   中英

JavaScript中for循環中的匿名回調函數

[英]Anonymous callback function in for loop in javascript

我正在嘗試在async.waterfall內部創建一個函數,該函數檢查數組中的每個id(如果在mongodb中具有此id的條目(使用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。

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

這樣做的正確方法是什么?

您正在調用該函數,而不是為其分配引用。

您的密碼

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

應該

query.exec(query.exec(checkDuplicate));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM