我正在尝试从findOne
进行数据呼叫。我已将查询放入follwer
变量中。当我管理console.log('Follower matched', follower)
的显示数据时,但是当我想使用此代码console.log('Follower Id', follower._id)
显示ID时,它显示错误Uncaught TypeError: Cannot read property '_id' of undefined
如何解决此问题?
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();
});
}
答案 0 :(得分:0)
您已订阅'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);
}
现在,您的代码如何“等待”直到ready()
是一个真实值?由于订阅句柄是反应性变量,因此您将使用Tracker
来“跟踪”订阅的内部状态更改并执行更改。在流星反应组件withTracker
中,它是默认内置的。
Meteor guide on withTracker
对此进行了详细说明。如果您遵循该指南并将其应用于代码,则应该能够成功订阅文档。