jQuery中的注释是否会引发误导?

时间:2013-11-11 20:31:57

标签: jquery promise

jQuery site示例中的评论说:

var div = $( "<div>" );

div.promise().done(function( arg1 ) {
  // Will fire right away and alert "true"
  alert( this === div && arg1 === div );
});

但那不完全正确,是吗?它会快速弹出一个警告框,你会认为它立即被激活,但实际上,下一行代码将被执行,然后每当承诺完成时,它会弹出警报框,对吗?

2 个答案:

答案 0 :(得分:4)

您正在查看的示例在上面的标题中说明了这一点:

  

在没有活动动画的集合上使用.promise()会返回a   解决了承诺:

他们试图证明这会立即返回已解决的承诺

答案 1 :(得分:1)

这是jQuery promises独有的另一个东西,正确的promises实现确定性执行顺序是有保证的。

是的,它会立即同步射击*。这意味着像缓存这样的常见模式需要额外注意,以确保代码不受基本随机执行顺序的影响。

例如,以下代码无法使用,因为结果是随机的:

console.log(1);
//uses ajax first then further requests are cached for 5-10 minutes:
getData().then(function(data) {
    console.log(3);
});
console.log(2);

这也意味着当许多promises按顺序使用时,jQuery promises容易受到堆栈溢出的影响。

*这也没有任何好处,使用MutationObserver和trampoline等轻量级调度程序可以有效避免stackoverflow和non-determinism。