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

首頁 > 編程 > JavaScript > 正文

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

2019-11-19 12:07:40
字體:
來源:轉載
供稿:網友

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

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

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

最開始的代碼是這樣的:

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() 方法觸發時會有一定的延時,所以間接的解決了這個問題。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 兴化市| 旬阳县| 大荔县| 邓州市| 乌苏市| 高青县| 天柱县| 久治县| 吉木萨尔县| 衡阳县| 民县| 那坡县| 偃师市| 达尔| 长武县| 县级市| 马龙县| 温州市| 响水县| 丹巴县| 棋牌| 杭州市| 鹿邑县| 四川省| 儋州市| 江山市| 绥棱县| 沧州市| 尚义县| 屯昌县| 呼和浩特市| 鄂伦春自治旗| 张掖市| 庐江县| 繁峙县| 祁东县| 宜丰县| 兰考县| 巴林左旗| 青州市| 清丰县|