Я создаю онлайн-систему викторин с использованием Meteor. Ожидается, что у каждого использования в викторине будет установлен собственный таймер на один час. Таймер должен начинаться с первого входа пользователя. В настоящее время я поддерживаю коллекцию под названием UserClocks (userId, timeLeft).Индивидуальные таймеры Meteor - setInterval()
Я написал setInterval как этот
var interval = Meteor.setInterval(function() {
console.log("User id: " + this.userId);
console.log("Searching clock for: " + clocksMap[this.userId]);
//clocksMap contains the _id of the UserClocks.
var userClock = UserClocks.find({_id: clocksMap[this.userId]});
if (!!userClock) {
console.log("Found clock: " + userClock.timeLeft);
} else {
console.log("Clock not found for user: " + this.userId);
}
var time = userClock.timeLeft;
time = time - 1;
UserClocks.update(userClock._id, {timeLeft: time});
console.log("Updated userClock. timeleft: " + time);
if (time === 0) {
//logout user and clear interval
Meteor.clearInterval(intervalMap[this.userId]);
}
}, 1000);
Этот setInterval() находится внутри метода, который называется Ь пользователем. Я продолжаю получать timeLeft как NaN, поскольку userClock не определен. Я думаю, я понимаю, почему я не могу использовать this.userId внутри setInterval(), но мне нужно решение моей проблемы. Как настроить таймер отдельно для каждого пользователя?
Я также попробовал userId из параметров метода в .find(). Он по-прежнему возвращает undefined для timeLeft! – Pawan
Что делать, если пользователь входит в консоль, 'UserClocks.update (userClock._id, {timeLeft: 999999})'? –
Я пробовал, но не определился. Однако UserClocks.find ({_ id: "o8y5nw4Wp5H7SF8bP") вернул LocalCollection.Cursor. Я использую небезопасный пакет и поместил свои UserClocks в мою общую коллекцию model.js. – Pawan