[编辑:]大家好,几天后没有找到任何解决方案,并且在这篇文章中收到答案,我再次尝试编辑这篇文章,欢呼。
通常,我自己找到了解决方案,但这次奇怪的事情让我日复一日地疯狂......
这就是事情:(使用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.tsMeteor.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中看到两个集合:
不幸的是,当我从db中获取时:
....still inside ngOnInit...
console.log("Documents Fetch:",Docss.find({}).fetch());
console.log("FieldLists Fetch:",fieldListss.find({}).fetch());
它可以工作,但仅适用于文档,我为fieldList获取一个空数组:
如果有人知道这里有什么问题请赐教:) 提前谢谢,抱歉英语不好 PS:如果您需要代码的任何其他部分,请告诉我
答案 0 :(得分:0)
直到订阅模块解决后,集合才可以使用。正如您在评论中所说,如果将查找内容嵌入到订阅功能中,则表明订阅已准备就绪,查找将正常工作。
在订阅准备就绪之前,对集合的任何find调用都将导致其不返回任何内容。
当一种获取有效而另一种无效时,您遇到的基本上是运气。第一次订阅已解决,因此第一次提取正确返回。第二个订阅尚未准备好,因此第二次提取失败。
这完全归因于JavaScript的异步特性。我认为您假设.subscribe在执行下一行代码之前将等到准备就绪。这样不行