Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JQuery对象承诺的目的是什么?_Javascript_Jquery_Html - Fatal编程技术网

Javascript JQuery对象承诺的目的是什么?

Javascript JQuery对象承诺的目的是什么?,javascript,jquery,html,Javascript,Jquery,Html,几年来,我一直在处理一个兼职问题,其中一些加载了jquery函数的DOM元素在函数调用后无法立即访问(这种行为有点像在不等待document ready事件的情况下执行函数)。即使假定.html()是同步的,这(以及这)建议使用html函数的承诺: $('#divId').html("<h1>hello</h1>").promise().done(function(){ //Callback }); 由于我在html函数的文档中找不到关于它的任何信息,我想知道这

几年来,我一直在处理一个兼职问题,其中一些加载了jquery函数的DOM元素在函数调用后无法立即访问(这种行为有点像在不等待document ready事件的情况下执行函数)。即使假定
.html()
是同步的,这(以及这)建议使用
html
函数的承诺:

$('#divId').html("<h1>hello</h1>").promise().done(function(){
    //Callback
});

由于我在
html
函数的文档中找不到关于它的任何信息,我想知道这个承诺的真正目的是什么,以及它是否在这个上下文中正确使用。

这两种方法没有关联。人们经常建议这样做的原因是,有人发现他们可以使用
.promise().done()
使具有竞争条件的代码工作。它工作的原因是相同的,在
setTimeout(fn,0)
中包装相同的代码将使它工作;它将其推送到稍后运行的回调队列,可能是在浏览器执行渲染后或在其他异步回调完成后

.html
是同步的,没有回调,也不需要回调。但是,浏览器的渲染器是异步的,因此在清除调用堆栈之前,它不会渲染更改。Using.promise将回调推送到回调队列,从而在解决争用条件或异步逻辑缺陷的呈现之后运行代码

jquery集合上使用的
.promise()
返回一个承诺,该承诺将在当前运行的所有jquery动画完成后解析。如果当前没有正在运行的动画,则promise将立即解析,回调将被推送到回调队列,待堆栈清除后调用


只不过是绷带而已。我建议不要使用它,而是修复导致它成为解决方案的任何异步逻辑缺陷。

当给定集合上的所有当前动画都完成时,返回的承诺就会解决。链接的答案完全是错误的。不,只是你链接到的特定的一个,有30多个UPVOUTS。这也是错误的是,那也是。那么如何等待浏览器渲染完成呢?我想向刚刚从
.html
方法添加的元素添加一个事件侦听器。我没有为我的casedocument准备好asnyc逻辑缺陷部分,窗口加载,否则如果发生异步错误,您必须单独等待每一个。如果需要等待渲染器运行,请使用“请求动画帧”或“设置超时”。
$('#divId').promise().done(function(){
    //Will also be called...
});