Я использую метеорит для отслеживания прогресса человека по мере продвижения по викторине. Я хочу вернуть случайный вопрос из викторин, который соответствует текущему вопросу. Моя проблема в том, что у меня есть два метода: один создает документ, чтобы отслеживать их прогресс через весь викторину, а другой создает документ для отслеживания конкретного вопроса, а также документов, соответствующих ответам. Мне нужно, чтобы «questionId» устанавливался в одном вызове метода, равном «currentQuestionId» в другом.Синхронизация данных по коллекциям в метеоре
Проблема заключается в том, что при попытке синхронизации текущего запроса в моем ответеToLectures с вопросом, который он фактически выбирает, не совсем работает в моем текущем коде, потому что методы асинхронны, но я вызываю их синхронно. Могу ли я получить помощь в том, как реорганизовать этот код на более метеорный? Самое забавное, что я замечаю, что если я поставлю console.logs во внутреннем блоке «if», я увижу, что они вызываются> 5 раз до загрузки страницы, я предполагаю, что я ожидаю, что как только он вернется, что он перестанет запускать блок, и в следующий раз, когда он загрузится, он сразу вернет правильный вопрос. Благодаря!
Question: function(){
var responsesToLectures = ResponsesToLectures.findOne({});
if (responsesToLectures != null){
if(responsesToLectures.currentProblemId == null){
var questionCount = Questions.find({level: responsesToLectures.currentLevel}).count();
if(questionCount != null){
var randomNumber = Math.floor((Math.random() * questionCount));
var randomQuestion = Questions.findOne({level: responsesToLectures.currentLevel}, {skip: randomNumber});
if (randomQuestion != null) {
Meteor.call('setRandomQuestion', randomQuestion._id, randomQuestion.lectureId);
return randomQuestion;
}
}
} else {
return Questions.findOne({_id : responsesToLectures.currentProblemId});
}
}
},
Вопрос заключается в том, что Question.findOne, который получает вернулся из этого другого идентификатора от того, который я поставил, используя «» setRandom вопрос. Каков правильный способ извлечения ценностей из документов в коллекциях, чтобы я мог передавать их в документы из других коллекций?
Это Монго дб, чтобы показать вам, что я имею в виду:
meteor:PRIMARY> db.responses.find();
{ "_id" : "zTTF7GrnuRqT4JNck", "userId" : "hneHgetL9oYaL2iWA", "questionId" : "ZSYJXn59ykA9QrTv6", "answerId" : "yHQzekpge486CwqLJ" }
{ "_id" : "47d2hhw7okLq2SXhm", "userId" : "hneHgetL9oYaL2iWA", "questionId" : "ZSYJXn59ykA9QrTv6", "answerId" : "WyyKfxzbinjxgrujd"}
{ "_id" : "ZqQu3TDcdMeo2SFBR", "userId" : "hneHgetL9oYaL2iWA", "questionId" : "ZSYJXn59ykA9QrTv6", "answerId" : "MES2Aj8PTNzMmthyh"}
{ "_id" : "dHtyKSxDccXvBTjnD", "userId" : "hneHgetL9oYaL2iWA", "questionId" : "ZSYJXn59ykA9QrTv6", "answerId" : "tPcCSjS8qhL7oebWZ" }
meteor:PRIMARY> db.responsesToLectures.find();
{ "_id" : "TohrY5tHK2DJ2ngWb", "userId" : "hneHgetL9oYaL2iWA", "lectureId" : "pZKuD2LnBh73wPTtN", "currentLevel" : 1, "currentQuestionId" : "FZBQu5wQq2bA2e6SB" }
meteor:PRIMARY> db.scores.find();
{ "_id" : "9HhC8CBG4JJTxcR8m", "userId" : "hneHgetL9oYaL2iWA", "questionId" : "ZSYJXn59ykA9QrTv6" }
Вы хотите изучить использование крючков для коллекции. –
Спасибо! Если я использую autoform на другой части сайта, я должен быть обеспокоен тем, что эти крючки коллекции будут вызваны тогда? – Coherent
Да, вам нужно это учитывать. –