estou usando $ .Deferred para carregar arquivos mulitiple:
$.when(
$.getScript("/assets/libs/swal/sweet-alert.min.js"),
$.getScript("/assets/js/jquery.form.js"),
$.getScript("/assets/js/jquery.preloader.js"),
$.getScript("/assets/js/item_inventory.js"),
$.Deferred( function(defer) {
$(defer.resolve);
}).promise()
).done(function() {
});
Mas quando eu vejo no console, os arquivos não são carregados de forma serial como
- sweet-alert.min.js
- jquery.form.js
- jquery.preloader.js
- item_inventory.js
Então o problema é o último item_inventory.js
tem alguma dependência relacionada com jquery.preloader.js
por isso seu erro de gerar, por vezes, existe alguma maneira eu posso carregar, em seguida, em série sem qualquer biblioteca de terceiros?
Respostas:
1 para resposta № 1Outra sugestão é usar jQuery.Deferred()
deste jeito:
var d1 = new $.Deferred();
var d2 = new $.Deferred();
var d3 = new $.Deferred();
var d4 = new $.Deferred();
$.when( d1, d2, d3, d4 ).done(function () {
console.log("Loaded in order.");
});
d1.resolve($.getScript("/assets/libs/swal/sweet-alert.min.js"));
d2.resolve($.getScript("/assets/js/jquery.form.js"));
d3.resolve($.getScript("/assets/js/jquery.preloader.js"));
d4.resolve($.getScript("/assets/js/item_inventory.js"));
2 para resposta № 2
$.getScript
Retorna Deferred
objeto que você pode usar para construir uma cadeia serial. Algo assim:
$.getScript("/assets/libs/swal/sweet-alert.min.js").done(function () {
$.getScript("/assets/js/jquery.form.js").done(function () {
$.getScript("/assets/js/jquery.preloader.js").done(function () {
$.getScript("/assets/js/item_inventory.js");
});
});
});
1 para resposta № 3
Você pode usar a função de retorno de chamada $.getScript()
Para alcançar isto.
$.getScript( "/assets/js/jquery.preloader.js", function() {
$.getScript("/assets/js/item_inventory.js")
});
Deste jeito, item_inventory.js
será carregado somente depois jquery.preloader.js
está carregado.
/> Fonte: jQuery.getScript () Documentação por jQuery
0 para a resposta № 4
Você poderia usar jQuery. then () para carregar o script da seguinte forma:
$.when(
$.getScript("/assets/libs/swal/sweet-alert.min.js"),
$.getScript("/assets/js/jquery.form.js"),
$.getScript("/assets/js/jquery.preloader.js")
).then(function() {
return $.getScript("/assets/js/item_inventory.js")
}).done(function() {
console.log("done")
});
Note que porque $.then()
devolve sua própria promessa, é de cadeia, e você pode aninhar quantas dependências você quiser.
0 para a resposta № 5
O que você está fazendo é exatamente o oposto de um fluxo serial. Você está invocando todos os seus $.getScript
chama junto, e passando a sua Deferred
objetos para $.when
. Isso significa que todos os quatro estão sendo executados em segundo plano ao mesmo tempo, independentemente uns dos outros.
Se você quiser sincronizar seu carregamento usando $.when
"s promessa-como API, você provavelmente deve fazer algo como:
$.when(
$.getScript("/assets/libs/swal/sweet-alert.min.js"),
$.getScript("/assets/js/jquery.form.js"),
$.getScript("/assets/js/jquery.preloader.js")
).done(function() {
$.getScript("/assets/js/item_inventory.js"),
}).done(function() {
// do whatever
});
Este código carrega sweet-alert.min.js
, jquery.form.js
e jquery.preloader.js
ao mesmo tempo, espera até todos carregamento concluído e apenas então cargas item_inventory.js