不想在oncanplay里監(jiān)聽维苔,那樣就是回調(diào)了宵荒,討厭回調(diào)地獄
(js以window.onload方式獲取audio.duration的值為NaN)[https://ask.csdn.net/questions/163442]
function getTime() {
setTimeout(function () {
var duration = $("#audio")[0].duration;
if(isNaN(duration)){
getTime();
}
else{
console.info("該歌曲的總時間為:"+$("#audio")[0].duration+"秒")
}
}, 10);
}
ios 解決audio元素獲取duration為Infinity
private async audioCanplay(e: any) {
const firsthandAudio: HTMLAudioElement = e.target;
while (firsthandAudio.duration === Infinity) {
await new Promise(r => setTimeout(r, 200));
firsthandAudio.currentTime = 10000000 * Math.random();
}
this.duration = firsthandAudio.duration;
}
我的實現(xiàn)
// 遠(yuǎn)程音頻
let audioUrl = "https://cdn1.miyamibao.com/mp3/111.mp3?" + new Date().getTime()
let audio = new Audio(audioUrl)
audio.load()
audio.play()
// let _tim = audio.duration
// audio.oncanplay = async function () {
// _tim = audio.duration
// cc.log(_tim)
// }
function getTime() {
return new Promise((resolve,reject)=>{
let repeatCount = 0
function _getTime() {
setTimeout(function () {
let _tim = audio.duration
if(isNaN(_tim) || _tim === Infinity){
repeatCount++
if(repeatCount < 20){
_getTime();
}else{
reject("err")
}
}
else{
resolve(_tim)
}
}, 1000);
}
return _getTime()
})
}
let[getTimeErr, durationTime] = await awaitWrap(getTime())
if(getTimeErr == 'err'){
}
// cc.log(getTimeErr)
// cc.log(durationTime)
let [_t, [getScoreErr, scoreData]] = await Promise.all([
sleep(durationTime),
awaitWrap(audioPingce(
// recordAudioUrl,
"https://cdn1.miyamibao.com/mp3/111.mp3",
"哈哈"
))
])
// cc.log(_t)
// cc.log(err)
// cc.log(score_data)
if(getScoreErr == 'err'){
}
// cc.log(_t)
// cc.log(err)
// cc.log(score_data)