From 462884a321950f910e55dc9b4b25533a31e2db4e Mon Sep 17 00:00:00 2001 From: yuzhiran Date: Sun, 5 Jul 2026 18:06:17 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20recorderStart=20=E5=BC=82=E6=AD=A5?= =?UTF-8?q?=E7=AB=9E=E4=BA=89=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 微信 RecorderManager.start() 是异步的,onStart 回调触发前 调用 stop() 会报 'operateRecorder:fail recorder not start'。 - 增加 recorderStarted 标志,onStart 时置 true - 增加 pendingStop 标志,stop() 在 start 前被调用时延迟执行 - onError 时全面清理 pendingStop/recorderStarted/skipAsr 状态 --- zhiyin-app/src/pages/interview/interview.vue | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/zhiyin-app/src/pages/interview/interview.vue b/zhiyin-app/src/pages/interview/interview.vue index 5bd9946..b93aa69 100644 --- a/zhiyin-app/src/pages/interview/interview.vue +++ b/zhiyin-app/src/pages/interview/interview.vue @@ -157,6 +157,8 @@ const asrLoading = ref(false) let recorder = null let recordTimer = null let skipAsr = false +let recorderStarted = false +let pendingStop = false function initRecorder() { // #ifdef MP-WEIXIN @@ -164,12 +166,20 @@ function initRecorder() { recorder = uni.getRecorderManager() recorder.onStart(() => { console.log('[Recorder] start recording') + recorderStarted = true recordingDuration.value = 0 recordTimer = setInterval(() => { recordingDuration.value++ }, 1000) + if (pendingStop) { + pendingStop = false + recorder.stop() + } }) recorder.onError((err) => { console.error('[Recorder] error:', JSON.stringify(err)) isRecording.value = false + recorderStarted = false + pendingStop = false + skipAsr = false recordingDuration.value = 0 asrLoading.value = false if (recordTimer) { clearInterval(recordTimer); recordTimer = null } @@ -179,6 +189,7 @@ function initRecorder() { }) recorder.onStop(async (res) => { isRecording.value = false + recorderStarted = false recordingDuration.value = 0 if (recordTimer) { clearInterval(recordTimer); recordTimer = null } if (skipAsr) { skipAsr = false; return } @@ -459,6 +470,10 @@ function stopRecord() { if (recordTimer) { clearInterval(recordTimer); recordTimer = null } recordingDuration.value = 0 } + if (!recorderStarted) { + pendingStop = true + return + } recorder.stop() }