2016-06-29 85 views
-1

里面我有一个简单的脚本来播放音频,如:JavaScript的变量分配一个回调函数返回未定义

 var audio = new Audio(music) 
     var music_duration 
     audio.addEventListener('loadedmetadata', function() { 
      var duration = audio.duration 
      console.log(duration) 
      music_duration = duration 
     }) 

     console.log("checking duration") 
     console.log(music_duration) 

这里未定义music_duration回报..

durationaddEventListener给出了音乐的持续时间。

我是javascript新手......这里有什么问题?被发射的等待loadedmetadata事件之前

+1

这可能是异步调用。需要等待回应。 –

+0

什么是解决方案? – aryan

+0

重复的问题详细解释了问题的原因,并解释了该机制如何工作以及您需要做什么。你不可能得到比这个问题上已经存在的答案更好的解释。 –

回答

0
console.log("checking duration") 
console.log(music_duration) 

将被执行。

您可以查看编辑脚本这样:

var audio = new Audio(music) 
    var music_duration 
    audio.addEventListener('loadedmetadata', function() { 
     console.log('here') 
     var duration = audio.duration 
     console.log(duration) 
     music_duration = duration 
    }) 
    console.log('there') 
    console.log("checking duration") 
    console.log(music_duration) 

你会看到therehere之前打印。

+0

解决方案是什么? – aryan

+0

@aryan你可以移动你需要在回调本身回调之后执行的代码 - 或者在其他函数中 – rpadovani

+0

你只是描述症状而不解决原因。 **异步控制**流程和**运行完成保证**是导致此行为的原因。 – ftor

相关问题