Опрос Mongo возвращает пустой массив в Template.foo.onCreate в приложении Meteor
Я получил этот код в моем проекте Метеор, в client/main.js
файл
Template.panel.onCreated(function loginOnCreated() {
var profile = Session.get('profile');
this.myvar = new ReactiveVar(User.find({}).fetch());
});
И результат User.find({})
пустой. Если я запрашиваю это где-либо еще (в том числе meteor mongo
) Я получаю массив пользователей.
Поэтому мне интересно, если это проблема с тем, что этот код работает на стороне клиента. В этом же файле этот запрос работает в других местах, но, вероятно, в контексте сервера.
Как я могу заполнить это ReactiveVar
с результатом Монго, как только шаблон / страница загружается?
Если я сделаю что-то вроде в Meteor.startup()
на стороне сервера:
console.log(User.find({}).count());
Это дает мне правильное количество пользователей. Немедленно.
@редактировать
Если я просто добавлю setTimeout
в течение нескольких секунд (это не может быть всего за 1 секунду, нужно больше времени), это работает в том же месте.
Template.panel.onCreated(function loginOnCreated() {
//...
setTimeout(function(){
template.timeline.set(User.find({}).fetch());
console.log(timeline)
},3000);
});
Итак, кто-нибудь знает, почему это занимает так много времени, чтобы позволить мне сделать эту операцию? Любое решение?
1 ответ
User.find({}). Fetch() выдаст список пользователей только на стороне сервера.
Вероятно, вы можете написать метеорный метод для извлечения списка пользователей на стороне сервера и вызвать его с помощью meteor.call.
В функции обратного вызова для этого вызова вы можете присвоить результат нужной переменной.