Метеоритная сессия на шаг позади

Я пытаюсь проверить, существует ли имя пользователя в коллекции пользователей. В случае проверки данных функция запускается быстрее, чем метод вызова (как вы все знаете). Это приводит к тому, что Session становится на один шаг позади, когда пользователь проверяет имя пользователя для доступности.

Я застрял с ними в течение очень долгого времени, если у вас есть обходной путь для этого, я был бы очень признателен.

Вот код:

const ChooseUsername = React.createClass({


  getInitialState() {
    return {
      value: ''
    };
  },
  
  getValidationState() {
    const value = this.state.value;
    Meteor.call("userExists", value, (err, userExists) =>{
                if (err){
                return err;
                }
                else{
                return Session.set('result',userExists)
            }
        }) 
                 if(Session.get('result'))
                 return "error";
                 else return 'success';
  },
  
  handleChange(e) {
    this.setState({ value: e.target.value });
  },

  render() {
      
    return (<div id="signInPage">
                    <div id="tutorial">
                        <h4>Please Choose a Username</h4>
                         <form>
                            <FormGroup
                            controlId="formBasicText"
                            validationState={this.getValidationState()}
                            >
                            <FormControl
                                type="text"
                                value={this.state.value}
                                placeholder="Type your username"
                                onChange={this.handleChange}
                            />
                            <FormControl.Feedback />
                            <HelpBlock>You can't change your username later</HelpBlock>
                            </FormGroup>
                        </form>
                        <p><a className="btn btn-success signupButtons" href="/" role="button">See tutorial</a></p>
                   </div></div>);
  }
});

export default ChooseUsername;

Редактировать:

Просто измените getValidationState() с помощью следующего кода, и он работает как шарм.

getValidationState() {
    const value = this.state.value;
    Meteor.call("userExists", value, (err, userExists) =>{
                if (err){
                return err;
                }
                else{
                return this.setState({userIsThere:userExists})
            }
        })
    const userIsThere = this.state.userIsThere 
                 if(userIsThere)
                 return "error";
                 else return 'success';
  },

0 ответов

Другие вопросы по тегам