setTimeout работает не так, как ожидалось React Native

#javascript #reactjs #react-native #axios #settimeout

#javascript #reactjs #react-native #axios #settimeout

Вопрос:

Я пытаюсь вызвать функцию через 40 секунд в React native. Но, похоже, независимо от того, в какое время я устанавливаю вызовы функций в течение 15-18 секунд. Попробовал несколько решений, но не повезло.

Мой полный код приведен ниже:

 export default class OpenLocker extends Component {
  constructor(props) {
    super(props)
    this.state = {
      disable: false,
    }
  }

  openBox() {
    const data = {
      model: this.props.model,
      machine_id: this.props.machine_id,
      locker_id: this.props.locker_id,
    }

    const { model, machine_id, locker_id } = data

    const this_url = window.location.href
    const parse_url = url.parse(this_url, true, true)
    const host = parse_url.protocol   "//"   parse_url.host
    const api_url = `${host}/vendor/locker/open/${model}/${machine_id}/${locker_id}`

    axios
      .get(api_url)
      .then((response) => {
        if (!response.data) {
          alert("Box open failed!")
        } else {
          this.setState({
            disable: true,
          })
          setTimeout(() => {
            this.closeBox(data, host).bind(this)
          }, 40000)
        }
      })
      .catch((error) => {
        alert(error)
      })
  }

  closeBox(data, host) {
    const { model, machine_id, locker_id } = data
    const api_url = `${host}/vendor/locker/close/${model}/${machine_id}/${locker_id}`

    axios
      .get(api_url)
      .then((response) => {
        if (!response.data) {
          alert("Box close failed!")
        } else {
          this.setState({
            disable: false,
          })

          alert("Box opened successfully")
        }
      })
      .catch((error) => {
        alert(error)
      })
  }

  render() {
    return (
      <div>
        <button
          disabled={this.state.disable}
          id="open-box"
          type="button"
          className="btn btn-secondary btn-block text-white"
          onClick={this.openBox.bind(this)}
        >
          Open Box
        </button>
      </div>
    )
  }
}

  

Как вызвать функцию closeBox через 40 секунд или почему setTimeout() работает не так, как я ожидаю? Нужно ваше предложение. Заранее спасибо.

Комментарии:

1. @mplungjan не могли бы вы быть более конкретными??

2. Упс. Я вижу, что вы связываете (это) — повторно открыто

3. Спасибо. есть ли у вас какие-либо предложения, как заставить это работать??

4. Где определено (данные, хост). Похоже, вы не сохраняете ответ. данные в данных

5. Итак this.closeBox(response.data, host).bind(this); , предполагая, что хост определен в другом месте