有没有办法在另一个完成后调用自定义函数。很多jquery都包含一种回调方式,比如动画完成时你可以将另一个函数作为最后一个参数。但无论如何要将function1(params, function1(){alert('2');})
或其他东西串在一起?老实说,我不知道它会是什么样子。
谢谢
答案 0 :(得分:5)
您可以使用以下内容创建函数指针:
var yourCallback = function() {
alert('2');
}
您可以将其视为包含函数本身的对象(而不是其返回值)。由于它是一个对象,你可以将它传递给其他函数。
然后将其传递给您作为参数调用的函数(不要使用()
调用它,因为它将传递其返回值):
function1(params, yourCallback);
最后,在function1中,在需要时调用回调:
function function1(args, callback) {
//Some code
if (callback) {
callback();
}
}
答案 1 :(得分:0)
从技术上讲,你要求的模式是:
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
});
答案 2 :(得分:0)
function doSomething(arg1, callback){
// bla bla bla
callback();
}
答案 3 :(得分:0)
你的功能结构如下:
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);
答案 4 :(得分:0)
虽然回调很方便,但过度使用会导致丑陋且无法维护的代码。除了其他答案中显示的标准回调之外,您可能还想查看其他模式,如延迟/承诺和AOP。
在jQuery中,promises使用when() and then()实现。
requirejs也是一个很好的起点。