Как показать данные из (Метеор) реагируют findOne? - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь вызвать данные из findOne.Я поместил запрос в переменную follwer.когда я утешил console.log('Follower matched', follower), он показывает данные, но когда я хочу показать идентификатор с этим кодом console.log('Follower Id', follower._id), он показывает ошибку Uncaught TypeError: Cannot read property '_id' of undefined Как я могу исправить эту проблему? follower follower._id

renderTasks() {
    const followersSub = Meteor.subscribe('followers');
    if (followersSub.ready()) { // followers collection has been synced with client
        var follower =  Followers.findOne(
                            {userID : this.props.task._id, followedID: Meteor.userId()},
                            { sort: { createdAt: -1 }}
                        );
        console.log('Follower matched', follower); // should be present now
        console.log('Follower Id', follower._id);    
    }else{
        console.log('Not found');
    }   
}

Код API импорта:

import {Events, Followers} from './../../api/events';

Публикация кода в API (события):

if(Meteor.isServer) {
Meteor.publish('followers', function() {
      return Followers.find();
   });
}

1 Ответ

0 голосов
/ 05 декабря 2018

Вы подписались на 'Followers', но подписка может быть еще не готова.Код после Meteor.subscribe('Followers');, скорее всего, пока не найдет документ.

Чтобы узнать, готова ли ваша подписка, вам нужно проверить метод ready() в дескрипторе подписки:

const followersSub = Meteor.subscribe('Followers');
if (followersSub.ready()) { // followers collection has been synced with client
    var follower =  Followers.findOne(
                        {userID : this.props.task._id, followedID: Meteor.userId()},
                        { sort: { createdAt: -1 }}
                    );
    console.log('Follower matched', follower); // should be present now
    console.log('Follower Id', follower._id);    
}

Используйте withTracker для отслеживания состояния подписки

Теперь, как ваш код "ждет", пока ready() не станет истинным значением?Поскольку дескриптор подписки является реактивной переменной, вы будете использовать Tracker, чтобы «отслеживать» изменение внутреннего состояния подписки и действовать в соответствии с изменениями.В компоненте Meteor-React withTracker он встроен по умолчанию.

В справочнике Meteor на withTracker это объясняется подробно.Если вы будете следовать руководству и применять его к своему коду, вы сможете успешно подписаться на свои документы.

...