#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);
, предполагая, что хост определен в другом месте