自定义函数中的回调函数

有没有办法在另一个完成后调用自定义函数。 很多jquery都包含一种回调方式,比如动画完成后你可以把另一个函数作为最后一个参数。 但是无论如何将function1(params, function1(){alert('2');})或其他东西串在一起? 老实说,我不知道它会是什么样子。

谢谢

您可以使用以下内容创建函数指针:

 var yourCallback = function() { alert('2'); } 

您可以将其视为包含函数本身的对象(而不是其返回值)。 由于它是一个对象,您可以将其传递给其他函数。

然后将它传递给您作为参数调用的函数(不要使用()调用它,因为它将传递其返回值):

 function1(params, yourCallback); 

最后,在function1中,在需要时调用回调:

 function function1(args, callback) { //Some code if (callback) { callback(); } } 
 function doSomething(arg1, callback){ // bla bla bla callback(); } 

你的函数结构如下:

 function one(x, y, z, callback) { // do operations here callback(); } 

然后,由于函数是对象,您可以通过回调参数传递函数,IE:

 one(1, 2, 3, function(){alert('hello');}); 

要么

 var func = function() { alert('hello'); }; one(1, 2, 3, func); 

要么

 function func() { alert('hello'); } one(1, 2, 3, func); 

虽然回调很方便,但过度使用会导致丑陋且无法维护的代码。 除了其他答案中显示的标准回调之外,您可能还想查看其他模式,如延迟/承诺和AOP。

在jQuery中,promises是用when()和then()实现的 。

requirejs也是一个很好的起点。

从技术上讲,你要求的模式是:

 function myFunctionNeedsACallback(param1, callback) { //do stuff with param1 if(typeof callback === "function"){ callback.call(yourThisParam, anyOtherParams); } } 

虽然这是一个有用的模式…过度使用将导致丑陋,不可测试和不可维护的代码。 谨慎使用。

你的例子可以正常工作:

 myFunctionNeedsACallback(param, function() { alert('2'); }); //will alert 2 after running the rest of the contents of the function 

编辑

解决托马斯的情况:

 function ajaxCall1(){ return $.ajax(/*your parameters NO SUCCESS CALLBACK NEEDED*/); } function ajaxCall2(){ return $.ajax(/*your parameters NO SUCCESS CALLBACK NEEDED*/); } function ajaxCall3(){ return $.ajax(/*your parameters NO SUCCESS CALLBACK NEEDED*/); } $.when(ajaxCall1(), ajaxCall2(), ajaxCall3()).then(function(results1, results2, results3) { //do stuff with all 3 results without "nesting" things });