为什么javascripts函数不会一个接一个地加载?

时间:2013-10-01 10:17:33

标签: javascript

我的html开头 iam初始化变量“movieSRC”,如下所示:

<script type="text/javascript">

        var activeStep = getUrlVars();
        var movieSRC;

        cloud.getStepsForModules(activeStep.module, "UMCK").then(function(steps) {

            var calculatedStep = activeStep.step - 1;
            movieSRC = steps.steps[calculatedStep].movie;

        });

html 结束我有videojs的一些功能。

<script type="text/javascript">
    _V_("movie").ready(function() {
        var myPlayer = this;
        myPlayer.src(movieSRC);
</script>
</html>

我不明白为什么首先加载html 部分,然后在我的页面的开头作为第二个加载one after the other。我需要它对面! 我需要在页面的末尾保留videojs脚本,因为应首先加载视频,然后在脚本之后加载。

结论:movieSRC in myPlayer.src(movieSRC)是空的:(,但为什么?

3 个答案:

答案 0 :(得分:2)

正按顺序执行。首先声明几个变量,然后执行一个函数,然后在最后执行该部分。你忽略的是正在执行的函数是异步的。无论它运行得多快,非常不可能它将在页面加载完成之前完成。

这是异步的:

cloud.getStepsForModules(activeStep.module, "UMCK")

所以正在执行其他一切正在加载。 在执行之后需要发生的任何事情都需要从其.then()处理程序中调用:

cloud.getStepsForModules(activeStep.module, "UMCK").then(function(steps) {

    var calculatedStep = activeStep.step - 1;
    movieSRC = steps.steps[calculatedStep].movie;

    // I don't know this plugin, but find your "myPlayer" here somehow
    myPlayer.src(movieSRC);

});

或许这个顺序对整个插件更有意义:

_V_("movie").ready(function() {
    var myPlayer = this;

    cloud.getStepsForModules(activeStep.module, "UMCK").then(function(steps) {
        var calculatedStep = activeStep.step - 1;
        movieSRC = steps.steps[calculatedStep].movie;
        myPlayer.src(movieSRC);
    });
});

答案 1 :(得分:1)

最有可能的是,在响应从上面的cloud.getStepsForModules函数返回之前,正在评估最后的脚本。

此外,第二个脚本中存在语法错误 - 您缺少右括号/ paren /分号集。

尝试将使用结果的函数放入回调中,例如

<script type="text/javascript">

    var activeStep = getUrlVars();
    var movieSRC;

    cloud.getStepsForModules(activeStep.module, "UMCK").then(function(steps) {

        var calculatedStep = activeStep.step - 1;
        movieSRC = steps.steps[calculatedStep].movie;
        _V_("movie").ready(function() {
           var myPlayer = this;
            myPlayer.src(movieSRC);
            });

    });

答案 2 :(得分:0)

JavaScript代码确实按照它出现的顺序执行。但是,有些函数是异步的,这意味着它们在一个单独的线程中执行。您的第一个函数是否可能是异步的?

如果要确保在异步函数之后执行某些代码,请在异步函数的回调方法中调用该代码。