(Angular2 Meteor)从集合中获取在ngOnInit中返回空,但不是对于所有集合

时间:2018-06-07 14:06:50

标签: angular meteor angular-meteor

[编辑:]大家好,几天后没有找到任何解决方案,并且在这篇文章中收到答案,我再次尝试编辑这篇文章,欢呼。

通常,我自己找到了解决方案,但这次奇怪的事情让我日复一日地疯狂......

这就是事情:(使用Meteor和Angular2)

我有两个不同的集合,文档和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();
...

它正在工作,现在,我可以在mongol中看到两个集合:

Mongol result

不幸的是,当我从db中获取时:

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

它可以工作,但仅适用于文档,我为fieldList获取一个空数组:

Result in chrome web console

如果有人知道这里有什么问题请赐教:) 提前谢谢,抱歉英语不好 PS:如果您需要代码的任何其他部分,请告诉我

1 个答案:

答案 0 :(得分:0)

直到订阅模块解决后,集合才可以使用。正如您在评论中所说,如果将查找内容嵌入到订阅功能中,则表明订阅已准备就绪,查找将正常工作。

在订阅准备就绪之前,对集合的任何find调用都将导致其不返回任何内容。

当一种获取有效而另一种无效时,您遇到的基本上是运气。第一次订阅已解决,因此第一次提取正确返回。第二个订阅尚未准备好,因此第二次提取失败。

这完全归因于JavaScript的异步特性。我认为您假设.subscribe在执行下一行代码之前将等到准备就绪。这样不行