一:this報錯
1、報錯this.getUserInfo(this.setData) is not a function;at pages/index/index onShow function;at api request success callback function
TypeError: this.getUserInfo is not a function
在回調(diào)結(jié)果里調(diào)用這個頁面的函數(shù) this.fun() 或者 this.setData 時就會報錯,這時要在函數(shù)一開時的地方使用var that = this;,然后使用that調(diào)用數(shù)據(jù)。
這里的this指向的就是請求本身了如( wx.request ),而不是這個頁面!!!
-
onLoad:function(options){
-
this.login();
-
},
-
-
login:function(){
-
var that = this;// 這個地方非常重要,重置data{}里數(shù)據(jù)時候setData方法的this應為以及函數(shù)的this, 如果在下方的sucess直接寫this就變成了wx.request()的this了
-
wx.login({
-
success: function (res) {
-
if (res.code) {
-
//發(fā)起網(wǎng)絡請求
-
wx.request({
-
url: 'https://applet.ech-med.com/appwx/getAppToken',
-
data: {
-
code: res.code
-
},
-
success: function (re) {
-
console.log(re);that.getUserInfo();
-
that.setData({ });//如果在sucess直接寫this就變成了wx.request()的this了.必須為getdata函數(shù)的this,不然無法重置調(diào)用函數(shù)
-
}
-
})
-
} else {
-
console.log('獲取用戶登錄態(tài)失敗!' + res.errMsg)
-
}
-
}
-
})
-
},
-
-
getUserInfo: function () {
-
console.log("獲取用戶信息")
-
},
二:后臺音樂播放注意事項
分享者:默識,來自原文地址
-
wx.seekBackgroundAudio(OBJECT)
作用:控制音樂播放進度。
注意: 該事件 會觸發(fā) wx.onBackgroundAudioPlay(CALLBACK) 事件 ,也就是相當于在調(diào)整進度后,后臺會自動的調(diào)用wx.playBackgroundAudio(OBJECT)函數(shù)。
-
使用 audio組件 制作的播放器,即使點擊"顯示在微信頂部",音樂依然會停止,使用 wx.playBackgroundAudio 相關API制作的播放器才不會。
-
wx.playBackgroundAudio(OBJECT),wx.pauseBackgroundAudio(),wx.seekBackgroundAudio(OBJECT),wx.stopBackgroundAudio()
注意:上述四個操作都是 異步操作,都可以設置OBJECT參數(shù),都有 success , fail , complete 回調(diào) ,參照wx.playBackgroundAudio(OBJECT) 的 OBJECT說明,OBJECT說明
-
后臺播放音樂暫停后怎么從上次播放的地方繼續(xù)播放?
-
使用 seekBackgroundAudio。
官網(wǎng)并沒有相關解釋,初步思路是使用 playBackgroundAudio 播放音樂后,再調(diào)用 seekBackgroundAudio 將進度調(diào)整到上次停止的地方,但是由上面的第一條所描述,這樣做的結(jié)果會導致onBackgroundAudioPlay 會被觸發(fā)兩次,所以我們可以直接調(diào)用seekBackgroundAudio調(diào)整播放進度即可(前提是之前有播放過歌曲,就是確保歌曲地址已經(jīng)被設置,不然無效),隨后音樂會自動播放.
-
使用 playBackgroundAudio
經(jīng)測試調(diào)用playBackgroundAudio,并且傳入的歌曲地址參數(shù)和上次相同時,歌曲會從上次暫停的時間位置繼續(xù)播放
-
wx.stopBackgroundAudio
注意:經(jīng)測試,再調(diào)用 wx.stopBackgroundAudio 函數(shù)之后,緊接著調(diào)用 wx.playBackgroundAudio ,在pc端模擬測試時正常,后臺會停止播放音樂,然后再播放新的音樂,但是,在手機上卻會打斷緊接著調(diào)用的 wx.playBackgroundAudio 的播放(坑啊T-T),測試真機為phone5。
-
回調(diào)函數(shù)的觸發(fā)時機。
-
wx.onBackgroundAudioPlay(CALLBACK) 監(jiān)聽音樂播放。
-
wx.onBackgroundAudioPause(CALLBACK) 監(jiān)聽音樂暫停。
-
wx.onBackgroundAudioStop(CALLBACK) 監(jiān)聽音樂停止。
上述監(jiān)聽函數(shù)會在調(diào)用對應的wx.playBackgroundAudio(OBJECT),wx.pauseBackgroundAudio(),wx.stopBackgroundAudio()等函數(shù)時,會被立即觸發(fā),對應的操作可能并沒有完成,比如調(diào)用 playBackgroundAudio播放音樂,只是給后臺發(fā)送信息,要播放音樂,但是此時音樂并沒有開始播放,可能還在加載等等,但是onBackgroundAudioPlay的回調(diào)函數(shù)會立即調(diào)用。
而wx.playBackgroundAudio(OBJECT),wx.pauseBackgroundAudio(OBJECT),wx.seekBackgroundAudio(OBJECT),wx.stopBackgroundAudio(OBJECT)中OBJECT里面的回調(diào)函數(shù)會在如下對應條件觸發(fā):
-
在歌曲加載完成之后,可以播放時觸發(fā)
-
在歌曲暫停之后,沒有聲音之后觸發(fā)
-
歌曲進度設置完成并且開始播放之后觸發(fā)
-
歌曲停止之后觸發(fā)
wx.onBackgroundAudioPlay(CALLBACK) , wx.onBackgroundAudioPause(CALLBACK) , wx.onBackgroundAudioStop(CALLBACK) 函數(shù)可以監(jiān)聽后臺操作歌曲時,觸發(fā)的事件,比如當小程序退出后,音樂暫停,也包括我們使用 wx.pauseBackgroundAudio 等函數(shù)時觸發(fā)的事件。
在wx.onBackgroundAudioPause(OBJECT)里面的 暫停回調(diào)函數(shù)函數(shù)不會被觸發(fā),wx.pauseBackgroundAudio(OBJECT)里面的回調(diào)函數(shù)只是當次主動操作有效。后臺自動暫停歌曲時并不會觸發(fā)該回調(diào)函數(shù),wx.playBackgroundAudio(OBJECT),wx.pauseBackgroundAudio(),wx.seekBackgroundAudio(OBJECT),wx.stopBackgroundAudio()都是一樣的機制。
-
怎么獲取歌曲播放時的 回調(diào)函數(shù)?
微信小程序官方文檔,playBackgroundAudio相關額API并沒有提供此函數(shù),但是提供了wx.getBackgroundAudioPlayerState函數(shù)用于獲取歌曲播放時歌曲額進度信息,所以我們可以使用setInterval定時函數(shù)模擬這個事件。下面是我模擬的相關事件,
var timer = setInterval(() => {
wx.getBackgroundAudioPlayerState({
success:function(res){
//調(diào)用需要更新的
//self._onUpdate(res);
}
});
}, 500);
-
最重要的一點,pc端的模擬器,上面描述的事件觸的順序會可能和手機端的觸發(fā)順序不一樣(T-T,天坑,本來調(diào)試好好的,pc端app突然就抽風,炸了,有時候播放歌曲后 立刻就暫停,至今不知道是為什么,手機端卻是正常的),所以還是多真機調(diào)試吧,都是淚。
|