我在使用findOne时遇到问题,因为它总是返回undefined。
此代码:
Routine.js
Meteor.methods({
.... // Some lines missing
'routines.getRoutine'(routineId) {
check(routineId, String);
return Routines.findOne(routineId);
},
});
注意:如果我执行一个Routines.findOne(routineId)的console.log,它会正确显示我正在寻找的元素。
App.jsx
handleSubmit(event) {
event.preventDefault();
const comment = ReactDOM.findDOMNode(this.refs.comment).value.trim();
Meteor.call('routines.addComment', this.state.routine._id, comment);
let a = Meteor.call('routines.getRoutine', this.state.routine._id);
ReactDOM.findDOMNode(this.refs.comment).value = '';
this.setState({
routine: a,
});
}
在我的Appjs中并不重要我如何尝试'a'总是未定义,我做错了什么?
提前感谢您的帮助!
答案 0 :(得分:2)
我非常确定您的问题是客户端上的Meteor呼叫是异步的,因此在您查询相同数据时,您调用的方法尚未完成。
尝试将其余代码放入回调中,如下所示:
handleSubmit(event) {
event.preventDefault();
const comment = ReactDOM.findDOMNode(this.refs.comment).value.trim();
Meteor.call('routines.addComment', this.state.routine._id, comment, function() {
let a = Meteor.call('routines.getRoutine', this.state.routine._id);
ReactDOM.findDOMNode(this.refs.comment).value = '';
this.setState({
routine: a,
});
});
}