有什么区别:
$.when(myFunction1()).then(myFunction2)
$.when(myFunction1()).then(myFunction2())
myFunction1().then(myFunction2)
myFunction1().then(myFunction2())
里面的函数返回一些ajax promise
return $.ajax( ... );
答案 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()
。