Подтвердить что ты не робот

Метеор подписывает обратный вызов

В соответствии с этой статьей здесь:

https://dweldon.silvrback.com/common-mistakes

Подписки не блокируют

Многие аспекты структуры выглядят как магия. Настолько, что это может забудьте забыть, как работают веб-браузеры. Возьмем этот простой пример:

Meteor.subscribe( 'сообщения');

var post = Posts.findOne();

Идея, что сообщение будет undefined, является основной причиной примерно одного в двадцати метеорных вопросах о stackoverflow.

Итак, почему не подписаться, есть обратный вызов, и если да, то почему он не ссылается чаще всего на литераторов Meteor?

Почему у нас нет:

Meteor.subscribe('posts', function(err, posts){

//when the items/posts actually arrive

}); 

Надеюсь, мой вопрос имеет смысл.

4b9b3361

Ответ 1

Возможно, у меня нет вопроса, но функция Meteor.Subscribe имеет обратные вызовы с именами методов onError и onReady.

Дополнительно. Может включать onError и onReady обратные вызовы. Если функция вместо объекта, он интерпретируется как обратный вызов onReady.

Из документов.

Например.

Meteor.subscribe("posts", {
  onReady: function () { console.log("onReady And the Items actually Arrive", arguments); },
  onError: function () { console.log("onError", arguments); }
});

Также проверьте эту проблему GitHub

Ответ 2

Примечание. Я прочитал статью после прочтения этого вопроса.

В то время как subscribe имеет необязательный обратный вызов, я намеренно избегал его в оригинальной статье, потому что в настоящее время нет общих шаблонов, которые его используют. Другими словами, я не хотел, чтобы читатели уходили от статьи, думая, что обратные вызовы на самом деле являются правильным решением этой проблемы.

В производственных приложениях подписки обычно бывают двух вариантов:

  • Global: инициируется сразу же после запуска клиента или, возможно, автозапуска.

  • Маршрут: инициируется как через опцию subscriptions или waitOn .

Также стоит отметить, что в последние недели появился шаблон подписки шаблона , хотя он еще не получил широкого распространения.

Во всех этих случаях подписка запускается, а затем может быть либо асинхронно проверена для реактивного состояния ready, либо проигнорирована с использованием guards, чтобы избежать ошибок.

Поскольку ready является реактивным, это дает нам те же преимущества обратного вызова, но с меньшим количеством строк кода. Рассмотрим два примера:

пример 1

Meteor.subscribe('posts', function() {
  Session.set('postsReady', true);
});

Tracker.autorun(function() {
  if (Session.get('postsReady'))
    showFancyAnimation();
});

пример 2

var handle = Meteor.subscribe('posts');

Tracker.autorun(function() {
  if (handle.ready())
    showFancyAnimation();
});

Оба примера демонстрируют ту же концепцию - подписку и затем реактивное тестирование состояния подписки. Как вы можете видеть, на самом деле нет никакой выгоды для обратного вызова.

Наконец, (как я уже указывал в статье), подписки часто пространственно отделены от кода, который их использует. Вы обычно подписываетесь в своем коде маршрута и потребляете результаты в своих шаблонах. По этой причине вы почти никогда не видите код, который выглядит следующим образом:

Meteor.subscribe('posts', function() {
  showFancyAnimation();
});

Фактически, единственное место, где я когда-либо сталкивался с кодом, подобным выше, - это ответы SO, потому что автор пытается сделать быструю демонстрацию, а не пытается показать типичный шаблон использования.

Ответ 3

Meteor.subscribe был улучшен с версии 2.1. Один из его обратных вызовов onError теперь заменен на onStop в документации Meteor v1.2.0.2

обратные вызовы Функция или объект

Дополнительно. Может включать onStop и onReady обратные вызовы. Если есть error, он передается как аргумент onStop. Если функция передана вместо объекта, он интерпретируется как обратный вызов onReady.

Имея это усовершенствование, Meteor.subscribe используется с обратными вызовами как объект

Meteor.subscribe( 'collection', {
    onStop:  function( error /* optional */ ) {
        // when the sub terminates for any reason,
        // with an error argument if an error triggered the stop
    },
    onReady: function() {
        // when ready
    }
});

Однако onError все еще работает для обратной совместимости. При этом такой сниппет теперь ниже, но не прерывается.

Meteor.subscribe( 'collection', {
    onError: function( error ) {
        // if the subscribe terminates with an error
    },
    onReady: function() {
        // when ready
    }
});

С другой стороны, Meteor.subscribe может использоваться с обратным вызовом как функция, как раньше

Meteor.subscribe( 'collection', function() {
    // when ready
});

Как мое личное уведомление, если Meteor.subscribe передается с неосторожными многочисленными функциями обратного вызова, только последний действует как обратный вызов onReady.

Meteor.subscribe( 'collection', function() {
    // this doesn't execute.
}, function() {
    // when ready.
});

Соответствующее обязательство Git указано здесь для справки.