Я объединил две мои публикации в одну, так как они были очень похожи. Оба они вернули набор курсоров. Я переписал их в API низкого уровня, чтобы сделать некоторый контроль над удалением данных.Публикация этого метеорита уже не запускается
Моя проблема в том, что по какой-то причине я полностью игнорирую, обратный вызов подписки onReady
никогда не срабатывает. У меня есть другой низкоуровневый pubsub в моем приложении, который публикует данные аналогичным образом и работает отлично.
На сервере отображаются все мои журналы, и никаких ошибок не отображается. Публикация выполняется правильно, и данные эффективно отправляются клиенту. На клиенте не запускается обратный вызов onReady
или onError
.
публикации:
Meteor.publish("getTalkthread", function (thread_id) {
unblock(this);
console.log("start");
let uids = tags = corrections = [],
self = this;
let posts_cursor = Modules.both.queryGet({
type : 'posts',
method : 'find',
query : { $or: [
{ _id: thread_id },
{ parent: thread_id }
]
},
projection : { sort : { _id: 1 },
limit : 50
}
});
let posts_array = posts_cursor.fetch(),
posts_ids = posts_array.map(e => (e._id));
//console.log("fetched posts", posts_array);
let corrs_cursor = Modules.both.queryGet({
type : 'corrections',
method : 'find',
query : { talkId: { $in: posts_ids } },
projection : { sort : { _id: 1 },
limit : 50
}
});
let corrs_array = corrs_cursor.fetch();
//console.log("fetched corrs", corrs_array);
let posts_authors = posts_array.map(e => (e.owner)),
corrs_authors = corrs_array.map(e => (e.owner));
let users_ids = _.union(posts_authors, corrs_authors);
let users_cursor = Modules.both.queryGet({
type : 'users',
method : 'find',
query : { _id: { $in: users_ids } },
projection : { sort : { date: -1 },
limit : 100,
fields : USER_PROFILE_FIELDS_
}
});
//console.log("fetched users", users_cursor.fetch());
let observers = {};
observers.posts = posts_cursor.observeChanges({
added : (id, fields) => { console.log("post added " + id); self.added ("posts", id, fields); },
changed : (id, fields) => { console.log("post changed " + id); self.changed("posts", id, fields); },
removed : (id) => {
console.log("test");
if (id != thread_id) {
console.log(true);
self.removed("posts removed " + id);
}
}
});
observers.users = users_cursor.observeChanges({
added : (id, fields) => { console.log("user added " + id); self.added ("users", id, fields); },
changed : (id, fields) => { console.log("user changed " + id); },
removed : (id) => { console.log("user removed " + id); }
});
observers.corrs = corrs_cursor.observeChanges({
added : (id, fields) => { console.log("corr added " + id); self.added ("corrections", id, fields); },
changed : (id, fields) => { console.log("corr changed " + id); self.changed("corrections", id, fields); },
removed : (id) => { console.log("corr removed " + id); self.removed("corrections", id); }
});
console.log("observers created");
this.ready();
self.onStop(() => {
observers.posts.stop();
observers.users.stop();
observers.corrs.stop();
});
console.log("end");
});
Подписка:
console.log("sub");
self.subscribe("getTalkthread", id, self.rerun.get()), {
onReady: function() {
console.log("READY");
if (!Posts.findOne({ _id: id })) {
$("#404NotFound").show();
$("#isoContent").hide();
} else if (Posts.findOne(id)) {
$("#isoContent").show();
}
$("#spin").hide();
},
onError: function() {
console.log("ERROR");
$("#spin").hide();
$("#404NotFound").show();
$("#isoContent").hide();
}
};
страница клиента отображается правильно, но манипуляции DOM не срабатывает, запрещая отображение содержимого. Кто-нибудь видит, что я делаю неправильно здесь?
Спасибо Вам
EDIT:
Я пытался вернуть массив из трех движков, и, по какой-либо причине, проблема та же. Однако я не понимаю, почему.
не уверен, что это за разблокировать (это); Есть пакеты, которые позволяют вам делать 'this.unblock()' в публикациях, если это то, что вы имели в виду. –
не уверен, в чем проблема. я проверил бы с пустой публикацией, которая просто называлась 'this.ready', и посмотрел, будет ли вызван ваш callback на клиенте. затем медленно создайте публикацию. –
Именование переменных с подчеркиваниями вредит моим глазам. Используйте camelCase в JS. Это не Python –