2016-02-03 58 views
-1

我刚刚开始学习承诺。我发现他们非常有趣,但我有一些疑问,我无法找到答案。深入了解jQuery承诺

  1. 我认为$.Deferred().promise$.get().promise$.fn.promise().promise只是相同的功能。 我对不对?
  2. 如果我对上一个问题是正确的,为什么$.Deferred().promise===$.get().promise返回false?
  3. $('#mybox').hide(3000).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! 
    

希望大家帮我澄清上述...

+0

你应该避免jQuery的承诺,因为他们不遵守统一的承诺的提案 –

+0

1.他们都是一个承诺,但不一样的承诺,所以2不会是==更不用说=== 3.I 。一个promise将被解析,任何'then'(或者类似的)回调将以它们所附加的顺序被回调,3.II你不会这样做,因为你没有权限访问延迟执行/拒绝函数来解决承诺(除非jQuery在返回的承诺中公开履行/拒绝) –

+0

@JaromandaX如果回答问题,您可以扩展您的评论并将其发布为答案吗? – twernt

回答

1
  1. 查看源,它们是不同的功能,但他们都返回一个承诺
  2. N/A
  3. I.当一个承诺被解决(通过解决或拒绝),任何then/catch(或jQuery中的情况下,类似的)C已添加的allbacks将以与它们相同的顺序回叫
    II。你不会这么做,因为你不能访问延迟解析/拒绝函数来解析promise - 除非jQuery在返回的promise中暴露解析/拒绝,这似乎不是案例
0
  1. 正确。它们都是承诺实现。
  2. 阅读equality comparisons on MDN。如果所有这些方法都指向相同的函数参考,那么是的,它们将是平等的。但是,由于您要求===返回false,这意味着这些方法是单独定义的。
  3. 解决承诺的触发器是动画完成时。您需要查看源代码(具体取决于它们的具体实现hide)。
+0

1. - 他们是**不是**相同的功能 - 阅读jQuery的来源 –