之间有什么区别?

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


里面的函数返回一些ajax保证

return $.ajax( ... );

最佳答案

第一和第三选项的结果没有差异。第二和第四选项的结果没有差异。不需要添加的$.when(),但不会更改结果。

1st / 3rd和2nd / 4th之间的差异在于运行myFunction2的时间。

第二个和第四个选项立即调用myFunction2。在解决第一个承诺之前,第一个和第三个选项不会调用myFunction2



如果myFunction2只是要在myFunction1承诺被解决后才要执行的普通函数,则第一个和第三个选项将等待执行myFunction2直到myFunction1承诺被解决的事实可以使实质性差异。

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



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

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


仅通过单个承诺即可根本不需要$.when()。其人生目的是等待多重承诺。因此,如果您只有一个诺言,那么上面的第二个选项将更加高效-只需对已有的诺言使用.then()即可。

07-26 06:54