4

別の関数が完了した後にカスタム関数を呼び出す方法はありますか。多くの jquery にはコールバックを行う方法が含まれています。たとえば、アニメーションが完了したら、最後のパラメーターとして別の関数を与えることができます。しかし、とにかくつなぎ合わせるものはありますfunction1(params, function1(){alert('2');})か?正直なところ、それがどのように見えるかわかりません。

ありがとうございました

4

5 に答える 5

5

次のような関数ポインタを作成できます。

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

関数自体 (戻り値ではない) を含むオブジェクトと考えることができます。これはオブジェクトなので、他の関数に渡すことができます。

次に、それを呼び出している関数に引数として渡します(()戻り値を渡すため、で呼び出さないでください):

function1(params, yourCallback);

最後に、function1 で、必要に応じてコールバックを呼び出します。

function function1(args, callback) {
    //Some code
    if (callback) {
        callback();
    }
}
于 2012-11-16T17:12:16.797 に答える
0

コールバックは便利ですが、使いすぎると見苦しくて保守できないコードになる可能性があります。他の回答に示されている標準のコールバックに加えて、遅延/約束やAOPなどの他のパタ​​ーンを見たいと思うかもしれません。

jQuery では、promise はwhen() と then() で実装されます。

requirejsも良い出発点です。

于 2012-11-16T17:21:30.537 に答える
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
});
于 2012-11-16T17:12:13.410 に答える
0
function doSomething(arg1, callback){
    // bla bla bla
    callback();
}
于 2012-11-16T17:12:17.110 に答える
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);
于 2012-11-16T17:17:25.357 に答える