standardmäßig, wenn ein Meteor-Client startet, wird eine Verbindung mit dem Server und abonniert Dokumente in jedem Meteor.Collection
Sie definiert. Das dauert einige Zeit, da beim Herstellen der Serververbindung und beim Empfangen von Dokumenten immer eine gewisse Verzögerung auftritt.
Meteor.startup()
auf dem Client ist sehr ähnlich wie $()
in jQuery - es führt sein Argument, sobald das Client-DOM bereit ist. Es tut nicht warten Sie auf die Sammlungen Ihres Kunden, um alle ihre Dokumente vom Server zu erhalten. So wie Sie den Code geschrieben haben, wird der Anruf zu find()
immer zu früh ausgeführt und 0 zurückgeben.
Wenn Sie Code ausführen möchten, bis eine Sammlung zuerst vom Server heruntergeladen wird, müssen Sie Meteor.subscribe()
zu verwenden explizit eine Sammlung abonnieren. subscribe()
nimmt einen Rückruf, der ausgeführt wird, wenn sich die erste Gruppe von Dokumenten auf dem Client befindet.
See:
meteor-publish und meteor-subscribe
Concurrency, willkommen zu. – Raynos
@Raynos Es sieht nicht wie ein Nebenläufigkeitsproblem aus. Dies geschieht jedes Mal, wenn der Client-Start-Handler ausgeführt wird. – pomber
Es ist ein Nebenläufigkeitsproblem, das Problem ist, dass Sie zwei Dinge gleichzeitig auf dem Server und einem auf dem Client ausführen. und Ihr erwartet den Server man magisch zuerst fertig – Raynos