录音结束不能触发onStop()事件
bindtouchstart的时候开始录音,bindtouchend停止录音,但是如果点一下就松开,进入了bindtouchend对应的方法,也调用了recorderManager.stop()方法,但是却不执行recorderManager.stop()并且未进入onstop()回调。如果按的时间长一点,就可以正常结束录音并进入onstop()回调。
4 回复
录音是个异步的过程
如果touch时间太短,当调用recordManager.stop()的时候录音的异步操作还没有开始,从代码的执行结果看,stop()操作就会被忽略。
所以小程序内部以录音的状态来判断是否执行回调是有问题的,没有合理的处理回调任务队列
__
__
推理猜测说完了,说说解决,大致思路就是给个自己的标志位。
const manager = wx.getRecordManager() let isRecording = false manager.onStart(() => { if (!isRecording) { // 说明还未开始录音就执行了stop了,会被小程序丢弃 // 因此再次执行stop manager.stop() } }) // ---- 业务代码 ---- function handleTouchstart () {
} function handleTouchend () { manager.stop() isRecording = false } |
__
__