作者:一腕儿本人 | 来源:互联网 | 2023-01-29 17:29
几年来,我正处理一个兼职问题,其中一些装有jquery html函数的DOM元素在函数调用后不能立即访问(行为有点像执行函数而不等待文档就绪事件).即使.html()
是假设是同步的,这个苏答案(也是这一个)建议使用的承诺html
函数:
$('#divId').html("hello
").promise().done(function(){
//Callback
});
承诺在这样的上下文中是有意义的,但是对于这个承诺有什么好处,它也将与每个jquery的对象一起返回:
$('#divId').promise().done(function(){
//Will also be called...
});
由于我在html
函数的文档中找不到任何关于它的内容,我想知道这个promise的真正目的是什么,以及它是否在这种情况下正确使用.
1> user400654..:
这两种方法无关.人们经常提出这个问题的原因是因为有人发现他们可以.promise().done()
用来制作具有竞争条件的代码.它的工作原理和包含相同代码的原因相同setTimeout(fn, 0)
.它会将其推送到稍后运行的回调队列,可能是在浏览器执行渲染之后或者在其他异步回调完成之后.
.html
是同步的,没有回调,也不需要回调.但是,浏览器的渲染器是异步的,因此在调用堆栈清除之前它不会呈现更改.使用.promise将回调推送到回调队列,从而在渲染之后运行代码,解决竞争条件或异步逻辑缺陷.
.promise()
在jquery集合上使用返回一个promise,它将在所有当前运行的jquery动画完成后解析.如果当前没有正在运行的动画,则promise将立即解决,并且一旦堆栈清除,回调将被推送到回调队列以进行调用.
它只不过是一个绑带.我建议不要使用它,而是修复任何异步逻辑缺陷导致它成为解决方案.