社区里有这么一个帖子:录音stop失效
帖子下的回复说的很有道理,启发了我的解决思路
录音是个异步的过程
录音的交互一般都是:按钮按下开始录音,按钮弹起停止录音。
但是如果按钮按下的持续时间太短,就会出现当调用RecorderManager.stop()的时候,录音的异步操作还没有返回结果。
这种情况下,stop()
就(像是)不会被执行
我觉得这里小程序的处理是不妥的。起码应该将stop()
操作缓存在任务队列里,再根据情况决定执不执行,或者进入onError
回调
推理猜测说完了,说说解决,大致思路就是给个自己的标志位:
const manager = wx.getRecorderManager()
let isRecording = false
manager.onStart(() => {
// isRecording为false
// 说明handleTouchend()->manager.stop()先于开始录音
// manager.stop()并没有被正确执行
// 因此需要再调用一次
if (!isRecording) {
manager.stop()
}
})
// ---- 业务代码 ----
function handleTouchstart () {
isRecording = true
manager.start()
}
function handleTouchend () {
manager.stop()
isRecording = false
}