之间有什么区别?
$.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()
即可。