Оптимистичный пользовательский интерфейс Meteor прервался, когда Meteor.publish с "созданным: {$gte: start, $lt: сейчас}"

Story: я использовал meteor 1.4 с angular 1. И я хочу сделать "Todo" приватным, используя Meteor.publishВот код клиента:

var now = new Date();
var start = new Date();
start.setHours(0, 0, 0, 0);
this.helpers({
    todos() {
    return Todos.find({createdAt: {$gte: start, $lt: now}, userId: Meteor.userId()}, {
            sort: {
                createdAt: -1
            }
        });
    },
    currentUser() {
        return Meteor.user();
    }
});

Проблема: когда я использовал Meteor.publish с "userId" интерфейс списка задач работал хорошо, он мог автоматически обновлять интерфейс после того, как я добавил один новый список задач. Но после того, как я добавил Meteor.publish фильтр с createdAt: {$gte: start, $lt: now}, Я должен обновить (F5) страницу, затем я могу увидеть новое задание. Вот код публикации на стороне сервера:

Meteor.publish('todos', function tasksPublication() {
     var now = new Date();
     var start = new Date();
     start.setHours(0, 0, 0, 0);
     return Todos.find({createdAt: {$gte: start, $lt: now}, userId: this.userId});
});

Кто-нибудь знает, как это исправить?

1 ответ

Решение

Я исправил эту ошибку. Поскольку я не был глубоко в тайнике Метеора, причина была моей догадкой:

  1. Пользовательский интерфейс клиента отправлялся в кэш (miniMongo) "Todos.find({созданный: {$gte: start, $lt: сейчас}, userId: this.userId})" "
  2. После вставки одного нового todo, он сначала будет вставлен в miniMongo.
  3. miniMongo повторно запускает запрос № 1, но "сейчас" - это время "сейчас" № 1. И нашел результат № 2 не подходит. Таким образом, он удалил новую запись из клиента.

И вот мое изменение: изменение кода

если у вас есть другая идея, пожалуйста, дайте мне знать.

Благодарю.

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