获取语音文件时长一会儿有一会儿没的,百思不得其解。
错误代码:
const getAudioDuration = async src => {
const audio = new Audio(src);
const duration = await new Promise(resolve => {
if (audio.duration) {
return resolve(parseInt(audio.duration * 1000));
}
audio.addEventListener('loadedmetadata', () => {
resolve(parseInt(audio.duration * 1000));
});
});
};
后来换了个方法:
const getAudioDuration = async src => {
const audio = new Audio(src);
return await new Promise(resolve => {
const getDuration = event => {
event.target.currentTime = 0;
event.target.removeEventListener('timeupdate', getDuration);
resolve(event.target.duration);
};
audio.addEventListener('loadedmetadata', e => {
const audio = e.target;
if (audio.duration === Infinity || isNaN(Number(audio.duration))) {
audio.currentTime = 1e101;
audio.addEventListener('timeupdate', getDuration);
return;
}
resolve(audio.duration);
});
});
};
完美解决