【发布时间】:2015-07-29 19:11:49
【问题描述】:
我的印象是所有 DOM 操作都是同步的。
但是,这段代码没有像我预期的那样运行。
RecordManager.prototype._instantiateNewRecord = function(node) {
this.beginLoad();
var new_record = new Record(node.data.fields, this);
this.endLoad();
};
RecordManager.prototype.beginLoad = function() {
$(this.loader).removeClass('hidden');
};
RecordManager.prototype.endLoad = function() {
$(this.loader).addClass('hidden');
};
Record 构造函数非常大,它涉及实例化一大堆Field 对象,每个对象都实例化自己的一些其他对象。
这会导致 1 到 2 秒的延迟,我希望在此延迟期间有一个加载图标,所以它看起来不仅仅是页面冻结了。
我希望事件的流程是:
- 显示加载图标
- 执行记录实例化操作
- 隐藏加载图标
除了流程最终是:
- 执行记录实例化操作
- 显示加载图标
- 隐藏加载图标
所以,你根本看不到加载图标,我只知道它的加载很短暂,因为 chrome 开发工具 DOM 查看器中的更新有点滞后。
我应该期待我的代码出现这种行为吗?如果有,为什么?
【问题讨论】:
-
确实是奇怪的行为!你从哪里打电话给
_instantiateNewRecord?也许,如果它来自阻塞渲染队列的事件处理程序,您可以异步运行它?
标签: javascript jquery dom asynchronous sync