如何等待动态加载的脚本在javascript中完全执行?
在javascript中,我加载了几个脚本,然后想在之后运行一个函数。问题是,我的承诺太早了。它会在每个文件下载后运行,但我需要等待它们全部添加到DOM并完全执行如何等待动态加载的脚本在javascript中完全执行?,javascript,jquery,ajax,promise,Javascript,Jquery,Ajax,Promise,在javascript中,我加载了几个脚本,然后想在之后运行一个函数。问题是,我的承诺太早了。它会在每个文件下载后运行,但我需要等待它们全部添加到DOM并完全执行 (function() { function getFile(path) { return $.get(path, function (data) { $("body").append(data); }); } $.when.apply($, [
(function() {
function getFile(path) {
return $.get(path, function (data) {
$("body").append(data);
});
}
$.when.apply($, [
// load all the individual components
"components/once/ti-snackbar/ti-snackbar.html",
"components/once/ti-not-supported/ti-not-supported.html",
"components/once/ti-drawer/ti-drawer.html",
"components/widgets/ti-company-table-row/ti-company-table-row.html",
"components/widgets/ti-chip-set/ti-chip-set.html",
"components/widgets/ti-list/ti-list.html",
"components/widgets/ti-user-card/ti-user-card.html",
"components/widgets/ti-tabs/ti-tabs.html",
"components/widgets/ti-data-table/ti-data-table.html",
"components/forms/ti-new-company-form/ti-new-company-form.html",
"components/forms/ti-edit-company-form/ti-edit-company-form.html",
"components/pages/ti-page-inquire/ti-page-inquire.html",
"components/pages/ti-page-companies/ti-page-companies.html",
"components/pages/ti-page-report/ti-page-report.html",
"components/pages/ti-page-admins/ti-page-admins.html",
"components/pages/ti-page-contacts/ti-page-contacts.html",
"components/pages/ti-page-policy/ti-page-policy.html",
"components/pages/ti-page-manual/ti-page-manual.html",
"components/pages/ti-page-404/ti-page-404.html",
"components/tabs/ti-tab-name/ti-tab-name.html",
"components/tabs/ti-tab-tags/ti-tab-tags.html",
"components/tabs/ti-tab-status/ti-tab-status.html",
"components/tabs/ti-tab-restriction/ti-tab-restriction.html",
"components/tabs/ti-tab-other/ti-tab-other.html"
].map(getFile)).then(function() {
// render the full app after all components load
getFile("components/once/ti-app/ti-app.html");
});
})();
我怎样才能修好它
注意:每个html文件都有一个
和
谢谢这可能很有用:
我发现此代码可能存在以下几个问题:
$.get()
调用按顺序完成,这样您就可以获得一个可变的完成顺序,并且可以按不同的顺序将内容附加到正文中(如果这很重要的话).then()
处理程序中(function() {
function getFile(path) {
return $.get(path);
}
function append(data) {
$("body").append(data);
}
var resources = [
"components/once/ti-snackbar/ti-snackbar.html",
"components/once/ti-not-supported/ti-not-supported.html",
"components/once/ti-drawer/ti-drawer.html",
"components/widgets/ti-company-table-row/ti-company-table-row.html",
"components/widgets/ti-chip-set/ti-chip-set.html",
"components/widgets/ti-list/ti-list.html",
"components/widgets/ti-user-card/ti-user-card.html",
"components/widgets/ti-tabs/ti-tabs.html",
"components/widgets/ti-data-table/ti-data-table.html",
"components/forms/ti-new-company-form/ti-new-company-form.html",
"components/forms/ti-edit-company-form/ti-edit-company-form.html",
"components/pages/ti-page-inquire/ti-page-inquire.html",
"components/pages/ti-page-companies/ti-page-companies.html",
"components/pages/ti-page-report/ti-page-report.html",
"components/pages/ti-page-admins/ti-page-admins.html",
"components/pages/ti-page-contacts/ti-page-contacts.html",
"components/pages/ti-page-policy/ti-page-policy.html",
"components/pages/ti-page-manual/ti-page-manual.html",
"components/pages/ti-page-404/ti-page-404.html",
"components/tabs/ti-tab-name/ti-tab-name.html",
"components/tabs/ti-tab-tags/ti-tab-tags.html",
"components/tabs/ti-tab-status/ti-tab-status.html",
"components/tabs/ti-tab-restriction/ti-tab-restriction.html",
"components/tabs/ti-tab-other/ti-tab-other.html"
];
return Promise.all(resources.map(getFile)).then(function(data) {
// append all items to the body in order now that they are all retrieved
data.forEach(append);
}).then(function() {
// now that everything else is in place, load and append
// the part that uses those scripts and templates
return getFile("components/once/ti-app/ti-app.html").then(append);
}).catch(function(err) {
// handle error here
console.log(err);
throw err; // propagate error
});
})().then(function() {
// everything loaded here for code outside the IIFE here to know when it's all done
}).catch(function(err) {
// error occurred here for code outside the IIFE here to know there was an error
});
最后一个.then().catch()
是可选的,如果您想让iLife之外的代码能够知道事情何时完成或发生错误
修改和推理:
ti-app.html
在加载和附加所有其他脚本之前不会加载和附加var l = new Loader();
l.require([
"example-script-1.js",
"example-script-2.js"],
function() {
// Callback
console.log('All Scripts Loaded');
// call your other script here
});
(function() {
function getFile(path) {
return $.get(path);
}
function append(data) {
$("body").append(data);
}
var resources = [
"components/once/ti-snackbar/ti-snackbar.html",
"components/once/ti-not-supported/ti-not-supported.html",
"components/once/ti-drawer/ti-drawer.html",
"components/widgets/ti-company-table-row/ti-company-table-row.html",
"components/widgets/ti-chip-set/ti-chip-set.html",
"components/widgets/ti-list/ti-list.html",
"components/widgets/ti-user-card/ti-user-card.html",
"components/widgets/ti-tabs/ti-tabs.html",
"components/widgets/ti-data-table/ti-data-table.html",
"components/forms/ti-new-company-form/ti-new-company-form.html",
"components/forms/ti-edit-company-form/ti-edit-company-form.html",
"components/pages/ti-page-inquire/ti-page-inquire.html",
"components/pages/ti-page-companies/ti-page-companies.html",
"components/pages/ti-page-report/ti-page-report.html",
"components/pages/ti-page-admins/ti-page-admins.html",
"components/pages/ti-page-contacts/ti-page-contacts.html",
"components/pages/ti-page-policy/ti-page-policy.html",
"components/pages/ti-page-manual/ti-page-manual.html",
"components/pages/ti-page-404/ti-page-404.html",
"components/tabs/ti-tab-name/ti-tab-name.html",
"components/tabs/ti-tab-tags/ti-tab-tags.html",
"components/tabs/ti-tab-status/ti-tab-status.html",
"components/tabs/ti-tab-restriction/ti-tab-restriction.html",
"components/tabs/ti-tab-other/ti-tab-other.html"
];
return Promise.all(resources.map(getFile)).then(function(data) {
// append all items to the body in order now that they are all retrieved
data.forEach(append);
}).then(function() {
// now that everything else is in place, load and append
// the part that uses those scripts and templates
return getFile("components/once/ti-app/ti-app.html").then(append);
}).catch(function(err) {
// handle error here
console.log(err);
throw err; // propagate error
});
})().then(function() {
// everything loaded here for code outside the IIFE here to know when it's all done
}).catch(function(err) {
// error occurred here for code outside the IIFE here to know there was an error
});