我正在尝试使用 React Native 创建一个声音计量应用程序,但似乎如果我开始测光,我有一个无限循环,直到用户停止它,它会挂起应用程序。
基本上,用户点击一个按钮,调用startMonitor(),然后runMonitor启动,checkSound()检查当前的分贝水平。
此处的相关代码部分
startMonitor() {
KeepAwake.activate();
this.setState({ monitorStatus: true
}, this.runMonitor );
}
runMonitor() {
while(this.state.monitorStatus) {
if(this.state.beginWait) {
this.wait(5000);
}
if(!this.state.isTransmitting) {
this.checkSound();
}
}
}
关于如何连续/无限运行函数直到用户取消它的任何想法?
您可以使用
setInterval
:
startMonitor() {
this.runMonitorIV = setInterval(runMonitor, 1000);
}
runMonitor() {
while(this.state.monitorStatus) {
if(this.state.beginWait) {
this.wait(5000);
}
if(!this.state.isTransmitting) {
this.checkSound();
}
}
}
//called on user event
stopMonitor() {
clearInterval(this.runMonitorIV);
}
(不确定您的上下文或范围,但这是基本思想)
还有TimerMixin,它可以在组件卸载时清除这些计时器触发器。