javascript - 异步模板加载

标签 javascript jquery templates asynchronous promise

我正在尝试异步加载 25 个 html 模板

这是我的代码:

        var loopingLoadTemplate = function(index){
            var name = names[index];

            $.get('templates/' + name + '.html', function (data) {
                that.templates[name] = data;
                tplCount++;
                console.log(tplCount + " " + names.length);
                if (tplCount === names.length){
                    callback();
                }
            });
        };

        for (i = 0; i < names.length; i++){
            loopingLoadTemplate(i);
        }

tplCount 是我保留的一个计数器,这样我就知道何时可以安全地触发回调

问题是,有 25 个模板需要加载,当我在 Chrome 控制台的网络选项卡下检查时,我看到所有 25 个模板都已正确加载,但 console.log 告诉我 tplCount 停止于 21,我有不知道为什么。是否因为 for 循环触发得太快,导致 $ 函数的某些回调没有触发?

如何安全地异步加载所有这些模板?

所以我也尝试使用递归调用进行同步回退,但它在加载一些模板后神秘地停止并且没有给出警告信号

        var loadTemplate = function (index) {
            var name = names[index];

            console.log("loading " + names[index]);

            $.get('templates/' + name + '.html', function (data) {
                that.templates[name] = data;
                index++;
                if (index < names.length) {
                    loadTemplate(index);
                    console.log("trying another load");
                } else {
                    callback();
                    console.log("trying callback");
                }
            });
        };
        loadTemplate(0); 

最佳答案

好的,刚刚弄清楚为什么失败了

所以,确实所有模板都正确加载,但是,如果 html 模板没有内容,则回调函数中的数据将变为未定义,而不是像我预期的那样为空

当数据未定义时,该行失败:

that.templates[name] = data;

没有任何警告或错误,并且回调中的其余代码不会执行

由于所有模板均已加载,因此检查网络选项卡将给出所有状态成功结果

关于javascript - 异步模板加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16175443/

相关文章:

javascript - 如何正确处理文本框的焦点?

javascript - 拦截所有鼠标事件

c++ - cpp 文件的函数模板特化语法

c++ - 模板和 STL

javascript - 如何读取流.pipe(myfunction())

页面加载和 Bootstrap 进度条上的 Javascript 计时问题

javascript - AngularJS 中 ng-include 的替代品可能吗?

python - 为什么我的 POST 在获取值后不起作用

c++ - 结构和模板功能

javascript - 有没有办法在使用 javascript 更改之前找到单元格中的值