// start your web app code..
var p1 = new Promise();
var p2 = new Promise();
var p3 = new Promise();
// when all dependencies are done loading, means the page is truly "ready"
Promise.all([p1, p2, p3])
.then(() => {
// page done loading
});
// somewhere in the code...wait for Ajax content to load
// and resolve "p1" after the content has loaded
p1.resolve();
// somewhere in the code...wait for some other Ajax content to load
// and resolve "p2" after the content has loaded
p2.resolve();
// somewhere in the code...wait for all the images to load
// (http://stackoverflow.com/a/1977898/104380)
// and resolve "p3"
p3.resolve();
5条答案
按热度按时间b4qexyjb1#
听起来你需要让你的代码作为一个回调来运行,无论脚本必须首先执行,而不是绑定到
document.ready
事件。如果你可以张贴一些代码,我可能可以帮助更多。20jt8wwn2#
bianca,为什么不尝试从需要运行的脚本加载消息呢?在脚本末尾触发消息,这样您就知道需要运行的脚本已经完成。
b4qexyjb3#
Javascript按照编写的顺序执行。我猜你当前的代码是在HTML加载后运行的(即window.onload),如果是这样的话,就让你的消息成为Javascript中调用的最后一个东西。
唯一的例外是,如果您异步调用XMLHttpRequest,那么您需要将一个变量设置为“false”,并且在XMLHttpRequest完成时将该变量设置为“true”。然后,您可以在该变量为true时使用setTimeout进行监听。
7dl7o3gd4#
window.onload
是一个解决方案。window.onload
在DOM准备就绪并且所有资源都加载到浏览器中时触发。换句话说,它在浏览器的圆圈停止旋转时触发。mnemlml85#
确保页面真正完成加载并不总是一件容易的工作,特别是对于依赖于通过 AJAX 加载内容的页面,以及异步加载的其他资产(每个资产都可以独立加载,并与其他资产并行加载,例如图像)。
我对处理此类情况的建议:
创建某个全局Deferred对象(一个承诺),并确保只有在它所依赖的一切都“就绪”之后才能解析它。
最小示例:
关键是你需要手动确保所有异步的不同部分都被完全加载。这是一项乏味的工作,但它是一个非常可靠的解决方案。