Per impostazione predefinita, quando un client Meteor si avvia, si connette al server e sottoscrive documenti in qualsiasi Meteor.Collection
definito. Ci vuole un po 'di tempo per completare, dal momento che c'è sempre un po' di ritardo nello stabilire la connessione al server e la ricezione dei documenti.
Meteor.startup()
sul client è molto simile a $()
in jQuery - esegue il suo argomento una volta che il DOM client è pronto. Fa non attendere che le raccolte del cliente ricevano tutti i loro documenti dal server. Quindi, nel modo in cui hai scritto il codice, la chiamata a find()
verrà sempre eseguita troppo presto e restituirà 0.
Se si desidera attendere l'esecuzione del codice fino a quando non viene scaricato prima una raccolta dal server, è necessario utilizzare Meteor.subscribe()
in iscriviti esplicitamente a una raccolta. subscribe()
accetta una richiamata che verrà eseguita quando il set iniziale di documenti si trova sul client.
See:
meteor-publish e meteor-subscribe
Concorrenza, benvenuto ad esso. – Raynos
@Raynos Non sembra un problema di concorrenza. Succede ogni volta che viene eseguito il gestore di avvio del client. – pomber
Si tratta di un problema di concorrenza, il problema è che si eseguono due cose contemporaneamente una sul server e una sul client. e si aspetta che il server si completi magicamente per primo – Raynos