Я получаю следующую ошибку при вызове функции обратного вызова для прослушивателя событий, который я зарегистрировал: «Предупреждение: не удается выполнить обновление состояния React на неустановленном компоненте. Это неоперация, но это указывает на утечку памяти в вашем приложении ... и т. д. "
Если вы ссылаетесь на код, оператор журнала «Проверка конфигурации» вызывается дважды при вызове функции обратного вызова. В частности, он регистрирует «проверить конфигурацию», затем обновление установленного состояния приводит к приведенному выше предупреждению, а затем снова регистрирует «проверить конфигурацию». Тем не менее, из моих операторов журнала я точно знаю, что прослушиватель событий запускается только один раз.
Следующая, но похожая проблема, в функции reloadData я регистрирую другого слушателя событий, чтобы получать уведомления, когда процесс Bluetooth завершен, и вызывать определенную функцию после каждого ответа. Однако из-за этой утечки памяти функции вызываются несколько раз, поэтому я получаю затопленную очередь из нескольких вызовов.
Я вставил соответствующий код ниже. Я искал решение в течение некоторого времени и не могу найти его. Любые предложения / помощь будут оценены. Если мое описание сбивает с толку, я могу попытаться объяснить дальше.
sync = async() => {
// other relevant async code
device.sendConfiguration()
EventRegister.addEventListener('synccomplete', this.verifyConfiguration)
}
verifyConfiguration = async() => {
const {device, configuration} = this.props
const {apiClient} = this.state
console.log('Verify Configuration')
EventRegister.removeEventListener('synccomplete')
this.setState({progressText: 'Verifying configuration', progress: 0.60, syncStage: 2})
const responseStatus = await apiClient.verifyDeviceConfiguration(configuration, esn)
if (responseStatus === 204) {
this.reloadData()
} else {
// display issue
}
}
reloadData = async() => {
const {device} = this.props
this.setState({progressText: 'Reloading data', progress: 0.80})
device.getInfo()
// device will send respective responses for each fxn
EventRegister.addEventListener('reloadComplete', async(cmd) => {
switch (cmd) {
case 'resp1':
device.getInfo_2()
break
case 'resp2':
device.getInfo_3()
break
case 'resp3':
device.getInfo_4()
break
default: break
}
})
}
Как описано выше, я получу очередь, которая будет выглядеть примерно так: [getInfo (), getInfo (), getInfo_2 (), getInfo_2 (), getInfo_2 (), getInfo_2 (), getInfo_3 (), getInfo_3 () и т. д. ...]
Я уже предполагаю, что мне придется реструктурировать функцию обратного вызова в reloadData для прослушивателя событий, но я ищу предложения о том, как это сделать ...
Спасибо.