/ / Carregar vários arquivos Javascript em serial - javascript, jquery

Carregar vários arquivos Javascript em serial - javascript, jquery

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

  1. sweet-alert.min.js
  2. jquery.form.js
  3. jquery.preloader.js
  4. 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 № 1

Outra 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.jse jquery.preloader.js ao mesmo tempo, espera até todos carregamento concluído e apenas então cargas item_inventory.js