React findOne在Client上返回undefined

时间:2017-10-09 00:09:07

标签: reactjs meteor

我在使用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'总是未定义,我做错了什么?

提前感谢您的帮助!

1 个答案:

答案 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,
        });
    });
}