1

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

1 に答える 1

0

OK、失敗する理由がわかりました

したがって、実際にはすべてのテンプレートが適切にロードされますが、html テンプレートにコンテンツがない場合、コールバック関数のデータは、予想どおり空ではなく、未定義になります。

データが未定義の場合、次の行で失敗します。

that.templates[name] = data;

警告やエラーが発生せず、コールバックの残りのコードは実行されません

すべてのテンプレートが読み込まれるため、[ネットワーク] タブをチェックすると、すべてのステータスが成功したという結果が得られます。

于 2013-04-23T20:08:42.627 に答える