2016-01-16 12 views
5

Jestem nowy w Meteor, więc bawiłem się i teraz utknąłem z tym problemem.findOne rzucanie niezdefiniowane, mimo że dane tam są

Używam React Router, aby spróbować pokazać motyw oparty na URL/(: userId). Jeśli w adresie URL nie ma identyfikatora użytkownika, powinien on wskazywać bieżący motyw użytkownika, a jeśli nie ma bieżącego użytkownika, powinien pokazać domyślny motyw.

Działa to losowo. Czasami otrzymuję poprawną kompozycję, czasami jest ona niezdefiniowana podczas czytania elementu themeColor, mimo że dane tam są. Widzę z console.log, że zawsze otrzymuje on właściwy identyfikator, ale wciąż findOne może wyrzucać niezdefiniowane. Dzieje się tak szczególnie, gdy zmieniam adres URL (/ xyz) i wracam do domyślnego (/).

Zweryfikowałem za pomocą konsoli, że userId jest faktycznym właścicielem themeColor i themeTextColor.

Używam React, React-router, autopublish. Usunąłem niepewność.

getMeteorData() { 

    var currentViewedPageId = this.props.params.userId? this.props.params.userId:(Meteor.userId()?Meteor.userId():false); 
    console.log(currentViewedPageId); //Allways right 
    console.log(Personalization.findOne({owner: currentViewedPageId}).themeColor); //Sometimes undefined, sometimes not 
    if(currentViewedPageId) 
    { 

     return { 
     currentUser: Meteor.user(), 
     themeColor: Personalization.findOne({owner: currentViewedPageId}).themeColor, 
     themeTextColor: Personalization.findOne({owner: currentViewedPageId}).themeTextColor 
     }; 
    } 
    return { 
     currentUser: Meteor.user() 
    } 

}, 
+2

Gdzie subskrybujesz te dane? Chyba musisz poczekać, aż subskrypcja będzie gotowa. –

+0

Na razie używam autopublish. – hiei

+3

Autopublish po prostu publikuje wszystkie dane, ale nie czeka na nie. Usuń autopublish i użyj opcji publikowania/subskrypcji. Najlepsza opcja to routing z wbudowanymi opcjami oczekiwania i subskrypcji, takimi jak: [flow-router] (https://github.com/VeliovGroup/flow-router) lub [iron-router] (https://github.com/iron -meteor/iron-router) –

Odpowiedz

0

Ponieważ kod działa czasem. Mogą istnieć dane testowe, które nie pasują do schematu. Przetestuj wszystkie dane w kolekcji.

Powiązane problemy