几年来,我一直在处理一个兼职问题,其中一些 DOM 元素用 jquery 加载html函数调用后无法立即访问该函数(该行为有点像在不等待文档就绪事件的情况下执行函数)。虽然.html()
假设是同步的,这所以答案(还有这个one)建议使用承诺html
功能:
$('#divId').html("<h1>hello</h1>").promise().done(function(){
//Callback
});
在这种情况下,promise 是有意义的,但这个 Promise 令我感兴趣的是,它也会随每个 jquery 的对象一起返回:
$('#divId').promise().done(function(){
//Will also be called...
});
由于我在文档中找不到任何有关它的信息html
函数,我想知道这个承诺的真正目的是什么,以及它在这种情况下是否正确使用。
这两种方法不相关。人们经常建议这样做的原因是因为有人发现他们可以使用.promise().done()
使他们的具有竞争条件的代码能够工作。它的工作原理相同,将相同的代码包装在setTimeout(fn, 0)
会让它发挥作用;它将其推送到稍后运行的回调队列,可能是在浏览器执行渲染之后或在其他异步回调完成之后。
.html
是同步的,没有回调,也不需要回调。但是,浏览器的渲染器是异步的,因此在调用堆栈清除之前它不会渲染更改。使用 .promise 将回调推送到回调队列,从而在渲染后运行代码,从而解决竞争条件或异步逻辑缺陷。
.promise()
用于 jquery 集合返回一个承诺,一旦所有当前运行的 jquery 动画完成,该承诺将得到解决。如果当前没有正在运行的动画,则 Promise 将立即解析,并且回调将被推送到回调队列,以便在堆栈清空后调用。
只不过是创可贴而已。我建议不要使用它,而是修复导致它成为解决方案的任何异步逻辑缺陷。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)