Прежде всего, полагаю, вам стоит подумать, хотите ли вы опубликовать много документов: все они переданы в каждому клиенту и вызывают большой трафик. Также я сомневаюсь, что на сервере не будет хватать памяти, если вы приостановите публикацию.
Если вы этого хотите, есть простой способ приостановить публикацию: передайте логический параметр из вашей подписки в вашу публикацию и сделайте подписку реактивно повторно запущенной, когда пакетная вставка запускается действием клиента. Звучит сложно, легко:
// on the client
Tracker.autorun(function() {
// reactively depend on event causing batch insert
var doPublish = reactiveVarTrueIfBatchInsert.get();
Meteor.subscribe('myPub', doPublish, function() { // ... });
});
...
// inside some event
reactiveVarTrueIfBatchInsert.set(true);
Meteor.defer(function() {
Meteor.call('batchInsertMethod', function() {
reactiveVarTrueIfBatchInsert.set(false);
});
});
// on the server
Meteor.publish('myPub', function() {
var doPublish = arguments[0];
var result = [];
if(doPublish) result = myDocs.find({});
return result;
});
Ключевая идея заключается в том, что reactiveVarTrueIfBatchInsert
является reactive variable, что истинно, если и только если вы в настоящее время партия вставки. ПРИМЕЧАНИЕ: использование обертки с Meteor.defer
имеет важное значение, так как без нее реактивная переменная не успеет повлиять на подписку перед вызовом метода.