別の関数が完了した後にカスタム関数を呼び出す方法はありますか。多くの jquery にはコールバックを行う方法が含まれています。たとえば、アニメーションが完了したら、最後のパラメーターとして別の関数を与えることができます。しかし、とにかくつなぎ合わせるものはありますfunction1(params, function1(){alert('2');})
か?正直なところ、それがどのように見えるかわかりません。
ありがとうございました
別の関数が完了した後にカスタム関数を呼び出す方法はありますか。多くの jquery にはコールバックを行う方法が含まれています。たとえば、アニメーションが完了したら、最後のパラメーターとして別の関数を与えることができます。しかし、とにかくつなぎ合わせるものはありますfunction1(params, function1(){alert('2');})
か?正直なところ、それがどのように見えるかわかりません。
ありがとうございました
次のような関数ポインタを作成できます。
var yourCallback = function() {
alert('2');
}
関数自体 (戻り値ではない) を含むオブジェクトと考えることができます。これはオブジェクトなので、他の関数に渡すことができます。
次に、それを呼び出している関数に引数として渡します(()
戻り値を渡すため、で呼び出さないでください):
function1(params, yourCallback);
最後に、function1 で、必要に応じてコールバックを呼び出します。
function function1(args, callback) {
//Some code
if (callback) {
callback();
}
}
コールバックは便利ですが、使いすぎると見苦しくて保守できないコードになる可能性があります。他の回答に示されている標準のコールバックに加えて、遅延/約束やAOPなどの他のパターンを見たいと思うかもしれません。
jQuery では、promise は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
});
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);