(Angular2 Meteor) извлечение из коллекции возвращает пустое значение в ngOnInit, но не для всех коллекций - PullRequest
0 голосов
/ 07 июня 2018

[edit:] Привет всем, после нескольких дней, не найдя решений и не получив ни одного ответа на этот пост, я пытаюсь снова с редактированием этого поста, приветствие.

Обычно я сам находил решения, но на этот разчто-то странное сводит меня с ума изо дня в день ..

Вот в чем дело: (Используя Meteor и Angular2)

У меня есть 2 разные коллекции, документы и fieldList, определенные одинаково:

в /both/collections/documents.collection.ts

export const Docs = new Mongo.Collection<Doc>('documents');
export const Docss = MongoObservable.fromExisting(Docs);

в /both/collections/fieldList.collection.ts

export const fieldLists = new Mongo.Collection<FieldList>('fieldList');
export const fieldListss = MongoObservable.fromExisting(fieldLists);

Также публикуется так же:

в /server/imports/publications/documents.ts

Meteor.publish('docsList', () => {
    return Docs.find({},{});
});

в / server/imports/publications/fieldList.ts

Meteor.publish('fieldListList', () => {
    return fieldLists.find({},{});
});

Теперь, в моем компоненте, я подписываюсь:

...import skipped...
export class documentPanelDocFormComponent implements OnInit,OnDestroy{
...Var declaration skipped...
...Constructor declaration skipped...
ngOnInit() {
        this.fieldListSub = MeteorObservable.subscribe('fieldListList').subscribe();
        this.docsSub = MeteorObservable.subscribe('docsList').subscribe();
...

И это работает так, как сейчас, я вижу в монголеобе коллекции:

монгольский результат

К сожалению, когда я получаю из базы данных:

....still inside ngOnInit...
console.log("Documents Fetch:",Docss.find({}).fetch());
console.log("FieldLists Fetch:",fieldListss.find({}).fetch());

Это работает, но только для документов, и я получаю пустой массив для fieldList:

Результат в веб-консоли Chrome

Если кто-нибудь знает, что здесь не так, пожалуйста, сообщитемне :) спасибо заранее и извините за плохой английский PS: если вам нужна другая часть кода, дайте мне знать

1 Ответ

0 голосов
/ 26 сентября 2018

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

Любой вызов поиска для коллекции до того, как подписка будет готова, приведет кв нем ничего не возвращается.

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

Это чисто из-за асинхронной природы JavaScript.Я думаю, вы предполагаете, что .subscribe будет ждать, пока он не будет готов, прежде чем выполнять следующую строку кода.Это не работает так

...