国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

詳解關于微信setData回調函數中的坑

2024-05-06 16:48:11
字體:
來源:轉載
供稿:網友

最近在做錄音功能,需求大體是這樣的:點擊開始錄音按鈕,頁面狀態變為錄音中,然后開始錄音。

不過偉大的測試同學發現了一個問題:當快速的連續點擊開始錄音按鈕時,會觸發多次開始錄音的事件,這樣在結束錄音時就仍然會有一個正在錄音中的標識,像這樣:

微信,setData,回調函數

下面開始曲折的修復之路:

最開始的代碼是這樣的:

Page({ /**  * 生命周期函數--監聽頁面加載  */ onLoad: function(options) {  // 初始化錄音管理器  this.recorderManager = wx.getRecorderManager()  // 錄音開始事件  this.recorderManager.onStart(() => {     }) }, /**  * 錄音按鈕點擊事件  */ tapRecordBtn: function() {  this.setData({   // 切換頁面顯示  }, () => {   // 開始錄音   this.recorderManager.start({})  }) },})

這時我的猜測是:頁面重新渲染之前,按鈕還是顯示狀態,所以還能被點擊。

那既然這樣,就加個標識,在一次點擊之后,到頁面重新渲染之前,都不能再次點擊就好了,代碼如下:

Page({ /**  * 生命周期函數--監聽頁面加載  */ onLoad: function(options) {  // 初始化錄音管理器  this.recorderManager = wx.getRecorderManager()  // 錄音開始按鈕點擊標識  this.isRecordBtnClicked = false  // 錄音開始事件  this.recorderManager.onStart(() => {  }) }, /**  * 錄音按鈕點擊事件  */ tapRecordBtn: function() {  // 如果錄音按鈕已被點擊(錄音即將開始),則不會再次觸發開始錄音事件  if (this.isRecordBtnClicked) {   return  }  this.isRecordBtnClicked = true  this.setData({   // 切換頁面顯示  }, () => {   this.isRecordBtnClicked = false   // 開始錄音   this.recorderManager.start({})  }) },})

想法是好的,不過并沒有實現想要的效果。還是可以被多次點擊。

于是在多次實驗之后,改為如下的方式(可行):

Page({ /**  * 生命周期函數--監聽頁面加載  */ onLoad: function(options) {  // 初始化錄音管理器  this.recorderManager = wx.getRecorderManager()  // 錄音開始按鈕點擊標識  this.isRecordBtnClicked = false  // 錄音開始事件  this.recorderManager.onStart(() => {   // 將錄音按鈕的點擊狀態在錄音開始時修改   this.isRecordBtnClicked = false  }) }, /**  * 錄音按鈕點擊事件  */ tapRecordBtn: function() {  // 如果錄音按鈕已被點擊(錄音即將開始),則不會再次觸發開始錄音事件  if (this.isRecordBtnClicked) {   return  }  this.isRecordBtnClicked = true  this.setData({   // 切換頁面顯示  }, () => {   // 開始錄音   this.recorderManager.start({})  }) },})

將按鈕的點擊狀態在錄音開始事件中進行重置,就可以解決這個問題了。

說一下最后驗證的結果:setData() 方法的回調函數并不是在頁面重新渲染完之后才執行的,所以并不能以回調函數作為一個明確的時間點來處理一些邏輯。而由于recorderManager.onStart() 方法觸發時會有一定的延時,所以間接的解決了這個問題。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 衢州市| 米林县| 铁力市| 贵阳市| 同江市| 湖南省| 瓮安县| 开阳县| 鹿邑县| 永嘉县| 石景山区| 井研县| 佛山市| 连城县| 泸水县| 房山区| 扬州市| 阿克苏市| 澎湖县| 泗洪县| 牡丹江市| 新乐市| 太仓市| 砚山县| 桂阳县| 阳西县| 泰兴市| 宜兴市| 永靖县| 郓城县| 闽清县| 中卫市| 伊川县| 织金县| 界首市| 化州市| 宾阳县| 沛县| 类乌齐县| 双桥区| 扶沟县|