Опрос 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.

В функции обратного вызова для этого вызова вы можете присвоить результат нужной переменной.

Другие вопросы по тегам