jQuery中Promise的差异

时间:2014-11-25 03:40:42

标签: jquery promise

有什么区别:

$.when(myFunction1()).then(myFunction2)
$.when(myFunction1()).then(myFunction2())
myFunction1().then(myFunction2)
myFunction1().then(myFunction2())

里面的函数返回一些ajax promise

return $.ajax( ... );

1 个答案:

答案 0 :(得分:3)

第1和第3选项之间的结果没有区别。第2和第4选项之间的结果没有差异。添加的$.when()不是必需的,但不会更改结果。

第1 /第3和第2 /第4之间的差异在于myFunction2运行的时间。

第2和第4个选项立即调用myFunction2。在第一个承诺得到解决之前,第一个和第三个选项不会调用myFunction2


如果myFunction2只是您希望在myFunction1承诺解决后才执行的正常函数,那么第1和第3个选项将等待执行myFunction2直到myFunction1承诺得到解决可能会产生重大影响。

因此,如果所有函数都返回从$.ajax(...)返回的promise,那么1st / 3rd和2nd / 4th之间的差异将在myFunction2 ajax调用运行的时间。第2和第4个将与myFunction2 ajax调用并行运行myFunction1 ajax调用(例如,同时)。在执行myFunction1 ajax调用之前,第一个和第三个将等待myFunction2 ajax调用完成。


只要myFunction1返回一个承诺,这两者之间的结果就没有区别了:

$.when(myFunction1()).then(myFunction2)
myFunction1().then(myFunction2)
只传递一个承诺时,根本不需要{p> $.when()。它的人生目标是等待多重承诺。所以,如果你只有一个承诺,那么上面的第二个选项就更有效了 - 只需对你已经拥有的承诺使用.then()