0

我的 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)总是空的:(,但为什么呢?

4

3 回答 3

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);
    });
});
于 2013-10-01T10:22:10.833 回答
1

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

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

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

<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);
            });

    });
于 2013-10-01T10:22:55.930 回答
0

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

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

于 2013-10-01T10:21:09.163 回答