深入研究jQuery的承诺

时间:2016-02-03 20:26:00

标签: javascript jquery promise

我刚开始研究承诺。我发现它们非常有趣,但我有一些疑问我无法找到答案。

  1. 我认为$.Deferred().promise$.get().promise$.fn.promise().promise功能相同。 我是对的吗?
  2. 如果我对上一个问题是对的,为什么例如$.Deferred().promise===$.get().promise会返回false?
  3. 例如,
  4. $('#mybox').hide(3000).promise()将创建一个promise对象,一旦动画队列为空,将被解析。在以下情况下,等效的基本程序是什么:

      I.  $.get().promise() : Is it a queue that is being watched? If yes, which one? 
          If no, which is the trigger for the above promise object to be resolved?
    
      II. var defer=new $.Deferred().promise() : The same question!
    
  5. 希望你帮我澄清一下......

2 个答案:

答案 0 :(得分:1)

  1. 查看来源,它们是不同的功能,但它们都返回了承诺
  2. N / A
  3. 予。当一个promise被解决时(通过解决或拒绝),任何then / catch(或jQuery的类似情况)回调都将以它们附加的相同顺序被回调<登记/> II。你不会想这样做,因为你无法在延期中访问解决/拒绝功能以解决承诺 - 除非jQuery在返回的承诺中公开解决/拒绝,这不是似乎是这样的

答案 1 :(得分:0)

  1. 正确。它们都是承诺实施。
  2. 阅读equality comparisons on MDN。如果所有这些方法都指向相同的函数引用,那么它们将是相同的。但是,由于您说===返回false,这意味着这些方法是单独定义的。
  3. 要解析的承诺的触发器是动画完成的时间。您需要查看源代码(意思是,这取决于它们对hide的具体实现)。