Javascript jQuery延迟对象
我正在开发一个“单页应用程序”,我正在寻找一种确保页面渲染完成的方法 我的应用程序流程如下所示:Javascript jQuery延迟对象,javascript,jquery,queue,Javascript,Jquery,Queue,我正在开发一个“单页应用程序”,我正在寻找一种确保页面渲染完成的方法 我的应用程序流程如下所示: 绘制导航标记 添加一个表示正在获取页面内容的覆盖 实际加载内容并将其注入页面内容区域 这就是我的不足之处: 注入页面内容后,我初始化标记相关的小部件(引导、自定义事件等) 这意味着,页面内容仍然可以被操纵,因此,我想知道 我可以使用jQuery的延迟对象(以及如何)作为函数队列,使用可以执行异步操作的函数以及普通的旧同步函数 使用它,我希望能够知道何时所有小部件都已初始化,然后删除页面加载指示器。您
使用它,我希望能够知道何时所有小部件都已初始化,然后删除页面加载指示器。您可以使用jQuery的延迟对象创建异步函数队列 下面是一个示例实现(由jsfiddle/coffeeandcode实现): 您可以在此处看到正在运行的代码:
是的,您可以使用承诺来知道几个异步函数何时完成,但您希望我们回答什么,没有代码,只是一个相当模糊的问题?小部件提供了什么反馈?他们是否向您承诺何时完成初始化?我更新了我的问题,我正在寻找这种用法的示例,甚至可能是一篇好文章,因为我找不到有助于我理解这个概念的文章。@Bergi目前没有,但我意识到代码重构是正确的
var Queue = function() {
var lastPromise = null;
this.add = function(obj, method, args, context) {
var methodDeferred = $.Deferred();
var queueDeferred = this.setup();
if(context === undefined) { context = obj; }
// execute next queue method
queueDeferred.done(function() {
// call actual method and wrap output in deferred
setTimeout(function() {
obj[method].apply(context, args);
methodDeferred.resolve();
}, 100);
});
lastPromise = methodDeferred.promise();
};
this.setup = function() {
var queueDeferred = $.Deferred();
// when the previous method returns, resolve this one
$.when(lastPromise).always(function() {
queueDeferred.resolve();
});
return queueDeferred.promise();
}
};