После прочтения документации о публикации REST ресурсов и остановки подписки, я был в состоянии кодировать что-то вроде этого:Как отказаться от подписки после остановки подписки в Метеор?
(с использованием радиально-Метеор)
публикации:
Meteor.publish('numbers', function(token){
const res = HTTP.get(API, { headers: {'token-header': token }});
_.forEach(res.data, (value, key) => {
this.added('numbers', key, { name: value });
});
this.ready();
});
Подписка:
class Ctrl{
constructor($scope, $reactive, $localStorage){
'ngInject';
$reactive(this).attach($scope);
this.subscriber = this.subscribe('numbers',() => {
return [$localStorage.token];
});
this.helpers(){ numbers(){ return Numbers.find(); }}
}
refresh(){
this.subscriber = this.subscribe('numbers',() => {
return [$localStorage.token];
}, {
onReady:() => { console.log('stopping refresh animation'); }
});
}
}
//more Angular code...
Предположим, что это значения, возвращаемые API:
[ 'Alpha', 'Bravo', 'Charlie', 'Delta', 'Echo', 'Foxtrot' ]
Все работает хорошо при загрузке первой страницы. Тем не менее, я заметил, что когда я спросил только Альфа, Браво и Чарли на обновления, Delta, Echo и Фокстрот по-прежнему остается в кэше Minimongo.
Я попытался добавить subscriber.stop()
в функцию обновления, чтобы удалить данные из кеша, но я не смог получить this.subscribe()
, чтобы снова работать.
Поэтому у меня есть два вопроса:
- Как подписаться снова после остановки подписки?
- Есть ли другой способ, чем оформить подписку?
С другой стороны, я смотрю на Apollo в качестве альтернативы. Я еще не пробовал это, но вы бы, ребята, рекомендовали его для производства, предполагая, что я знаю, что я с ним делаю?
Я считаю, что вы должны были очистить после публикации при отмене подписки (с помощью обратного вызова). Так же, как вы назвали 'this.added', когда вы создали подписку, вы должны были сделать' this.removed', когда он остановлен (на сервере). Это затраты на это вручную. – MasterAM