【发布时间】:2016-05-01 18:40:50
【问题描述】:
好的。我无语。两天前我遇到了这种奇怪的行为,我真的不知道发生了什么。
在我的代码中:
character: Characters.find({
'user._id': Meteor.userId(),
'gameId': this.props.gameId
}).fetch(),
它在 getMeteorData 函数内部(我使用 Meteor 和 React),mixin [ReactMeteorData] 也存在。
现在在componentWillMount() 函数中,我有这段代码。我要做的是检查这个用户和这个游戏里面是否有一个角色。
componentDidMount: function() {
console.log(this.data.character);
}
它返回 [Class] 以及我正在寻找的字符。伟大的!所以现在我添加这段代码,它看起来像这样:
componentDidMount: function() {
console.log(this.data.character);
if (this.data.character.length > 0) {
console.log('yay!');
} else {
console.log('nay...');
}
}
所以这是一个正常的、毫无疑问的if()。猜猜我从第一个console.log():[] 得到什么。为什么?为什么这个if 改变了我从数据库中获得的信息?!
【问题讨论】:
-
我没有看到条件块更改任何值。我看到一个空数组。您确定
this.data.character已加载并正确分配吗?你真的有数据库条目吗? -
是的。正如我所说,没有
if()块,我会得到一个[Class],其中有我想要的对象。我开始怀疑这可能与订阅以及它们加载所需的时间有关。 -
对不起。不明白。是的,竞争条件在这里可能是一个问题(特别是对于流星/节点非阻塞数据库 io)。您可以为
Characters.find(..)或(..).fetch()分配任何回调来处理您的数据吗? -
Meteor 在“技术上”是同步的。我认为这是不可能的。
-
好的。我对流星不熟悉。
标签: javascript mongodb meteor reactjs