У меня возникла проблема с мигающим миганием проекта, каждый раз, когда государство, использующее подписку на кампании, загружается. Мерцающе, я имею в виду, что данные были там, тогда он исчезнет и вернется через полсекунды позже.
Я добавил это в свойство resolve
состояния (используя ui-router):
campaigns: ($q) => {
var deferred = $q.defer();
Meteor.subscribe('campaigns', {
onReady: deferred.resolve,
onStop: deferred.reject
});
return deferred.promise;
}
Мерцание остановилось, но я действительно не понимаю этот код. Может ли кто-то, кто понимает угловой, нарушить эту ситуацию/отложить ситуацию?
Просто не знаю, почему это сработало. Благодарю.
$ q - угловая реализация обещаний.
в очень короткой частичной речи обещание имеет два обратных вызова, которые разрешаются при возвращении данных; функция разрешения, если вызов завершается успешно и отклоняется, если вызов завершается с ошибкой. любые данные, которые он получает, будут переданы в эти функции (по сути дела откладываются. ресольвы (данные) или отложен.редукция (ошибка)). $ q.defer() позволяет нам позже назначить разрешение/отклонения.
функция подписки на метеориты принимает несколько аргументов. имя строки коллекции, функцию, возвращающую массив аргументов, которые должны быть переданы в коллекцию, и объект/функция. объектная часть финального аргумента ожидает функции onReady и onStop и будет выполнять эти функции и передавать все полученные данные. мы переходим к нашим обратным вызовам здесь.
наконец, мы вернем обещание. resol.campaigns будет обещанием, которое мы можем получить от использования вызова.then(successCallback, failCallback). метеор обрабатывает это за кулисами.