Как получить доступ к объекту, предоставленному onloadedmetadata?

#javascript #reactjs

#javascript #reactjs

Вопрос:

Я пытаюсь получить значение в объекте, полученном из onloadedmetadata . Когда я консольно регистрирую весь объект audioDuration , я могу видеть и получать доступ к содержащемуся значению. Когда я регистрирую в консоли точный элемент AudioDuration.length , он возвращает undefined.

     var audioDuration = {};


    convertedAudio.onloadedmetadata = () => {

        audioDuration.length = convertedAudio.duration

              };

    console.log (audioDuration) // displays object {length: 25.547755}
    console.log (audioDuration.length) // displays undefined
  

Я хочу использовать значение AudioDuration.length напрямую, а не весь объект.

Комментарии:

1. у вас есть опечатка, AudioDuration, но ваша переменная audioDuration, a не должна быть заглавной

2. Спасибо @Nonik. Я это исправил. Все та же проблема.

Ответ №1:

ваша проблема связана с тем, что значение audioDuration задается только в обратном вызове и консоли.журнал используется непосредственно после onloadedmetadata, поэтому консоль.журнал будет запущен до того, как будет установлено значение. Два способа исправить это, один из способов — сделать console.войдите в onloadmetadata. Другой способ — вернуть обещание и дождаться результата.

 const audioDuration = {}
const getDuration = () => new Promise(resolve => {
  convertedAudio.onloadedmetadata = () => {
    resolve(convertedAudio.duration);
  }

})

getDuration().then(l => { console.log(l); audioDuration.length = l; })
  

Ответ №2:

Попробуйте это

 var audioDuration = {};


convertedAudio.onloadedmetadata = () => {

    if(convertedAudio.duration!=undefined){audioDuration.length = convertedAudio.duration}

};

console.log (audioDuration) // displays object {length: 25.547755}
console.log (audioDuration.length) // displays idk, u see what it does since i can't replicated convertedAudio