2015-07-26 3 views
0

Так что я пытаюсь проверить что-то в коллекции много раз. На загрузке страницы все отлично работает, но когда setInterval запускается и пытается просмотреть данные во второй раз, он действует как один мир данных, это Null и не может найти никакой информации.Метеор, анализирующий коллекцию setInterval работает только один раз

Template.something.helpers({ 
    repeatCheck: function repeatCheck() { 
    setInterval(findTechs, 5000); 
    console.log("repeatcheck"); 
    } 
}); 

function findTechs() { 
    _Queue.find({}).forEach(checkTime(this)); 
    }; 

    function checkTime(techInfo) { 
    console.log(newTime); 
    console.log(techInfo); 
    console.log(techInfo.endTime < newTime); 
    if (techInfo.endTime < newTime) { 
    console.log("fun"); 
    if (_Queue.findOne({ 
     _id: techInfo._id 
     })) { 
     _Queue.remove({ 
     _id: techInfo._id 
     }) 
    } 
    } 
}; 
+0

Просьба уточнить и показать весь * соответствующий * код (например, обработчик загрузки страницы) – Amit

+0

Я немного новичок в этом, поэтому не уверен, что такое обработчик нагрузки. Я знаю, что когда я проверяю коллекцию mongoDB, когда она работает, и во второй раз страница пытается это сделать, хотя setInterval не работает. Если вы можете объяснить, что такое обработчик, я буду счастлив пройти его, чтобы вы могли посмотреть. –

+0

Поскольку вы заявили, что «* на загрузке страницы все отлично работает», я просил вас показать, как вы обрабатываете события загрузки страницы. – Amit

ответ

0

В вашей JS есть ошибка.

function findTechs() { 
    _Queue.find({}).forEach(checkTime(this)); 
}; 

Это будет вызывать checkTime один раз с текущим контекстом в качестве аргумента. this, вероятно, относится к объекту window. В JavaScript вызов функции выполняется, когда есть скобки за переменной, содержащей функцию. Итак, checkTime(this) звонит checkTime, а затем возвращает вызов, который возвращается checkTime. Затем вызывается cursor.forEach с этим значением (которое равно undefined). Таким образом, документы внутри курсора повторяются с undefined, что ничего не делает.

Что вы хотите сделать что-то вроде этого:

_Queue.find({}).forEach(checkTime); 

Здесь фактическая функция за переменной checkTime передается cursor.forEach вызова.

Возможно, вы захотите прочитать обратные вызовы JavaScript.

+0

Прежде всего я должен сказать спасибо, и я обязательно прочитаю о обратных вызовах и многом другом при работе с кодом. Помимо общения с почти js, который находится в googlesheets, это мой единственный случай, когда вы возитесь с материалом. Я хочу еще раз поблагодарить вас за это, похоже, работает отлично. В течение нескольких дней ошибки в консоли не являются первыми. СПАСИБО. –

+0

Любовь, чтобы помочь :) – Kriegslustig

Смежные вопросы