別の関数が完了した後に関数を実行する方法はありますか?たとえば、次のようになります。jquery synchronous functions
doSomethingElese()はdoSomethingが完了した後にのみ実行します。これは可能ですか?
別の関数が完了した後に関数を実行する方法はありますか?たとえば、次のようになります。jquery synchronous functions
doSomethingElese()はdoSomethingが完了した後にのみ実行します。これは可能ですか?
あなたdoSomething()
機能は、あなたが、むしろそれがdoSomething()
戻った直後に実行することよりもその非同期要求のためdoSomethingElse()
コールバックを行うことになるでしょう(たとえば、Ajaxリクエストを行うと)非同期で何かをやっている場合。
これはコールバックに入れるための有効なソリューションのように見えるように、私はAjaxリクエストを作成していますが、私はコールバックの外でそれをやろうとしていました。 – ngreenwood6
は、明示的にそれ自体がこれを強制する方法はありません、しかし、1つのアイデアは、doSomethingの()はdoSomethingElseは()のパラメータとして受け入れるという値を返すことです。
retval = doSomething();
doSomethingElse(retval);
その方法は、少なくともあなたから誰かを防ぎますdoSomethingElse()を呼び出して、必要な引数を少なくとも提供しなくても...もちろん、doSomething()を呼び出すことからその引数を取得するかどうかは別の問題です。しかしこれはスタートです。
アイデアが完了しました。
どのように解決するかわかりません。質問が意味を成す唯一の方法は、doSomething()が非同期の処理を行っているかどうかです。戻り値と値を渡すことは、作業が完了したときには影響を与えません。 – Nosredna
実際には、jQueryで(少なくともある意味で)あなたが望むことができます。それは少しハッキーだと思うかもしれませんが、完璧に動作します。
他には使用しない要素をページに含めるだけです。例えばどこかの空のdiv。
<div id="syncFnHolder"></div>
そして、+あなたの機能で私が書いrunMe
機能をJSが含まれます。
function doSomething() { alert("First"); }
function doSomethingElse() { alert("Second"); }
function doSomethingElseThree() { alert("Third"); }
function runMe(fn, selec) {
return function() {
fn();
setTimeout(function() {
$(selec).dequeue("syncFnQueue");
}, 1000);
}
};
var selector = "#syncFnHolder";
//add three functions to a queue
$(selector).queue("syncFnQueue", runMe(doSomething, selector));
$(selector).queue("syncFnQueue", runMe(doSomethingElse, selector));
$(selector).queue("syncFnQueue", runMe(doSomethingElseThree, selector));
//start first function in queue (FIFO) others are triggered automatically
$(selector).dequeue("syncFnQueue");
これは、「第1」、「第2」、「第三」と言って、それらの間の1の距離で三のアラートを生成します。
遅延がないようにするには、setTimeoutを削除して、$(selec).dequeue("syncFnQueue");
のままにしておきます。
パラメータにパラメータが必要な場合など。 doSomething(x,y,z)
runMe
関数をより良い部分にし、返された関数を別々に構築する必要があります。ここで確認するか、新しい質問を投稿してください。
非常に興味があります – gpilotino
JSオブジェクトで待ち行列とデキューを行うだけではどうですか。ダミーのDOM要素にポップするのは無意味だと思われます。 – nickytonline
? jQueryを使ってどうしたらいいですか?あなたが今日のこの時(02:45 AM)に何を意味するのかはわかりません。 – jitter
の質問は少しあいまいです。
関数に非同期ビットがある場合は、コールバックを使用します。それが彼らのためのものです。
JavaScriptでアスペクト指向プログラミングを行う場合は、jQuery-aopをご覧ください。
あなたは、これを行うことができます....
function doSomething(callback) {
// code for do some thing
// now fire off the callback
if (typeof callback === 'function') {
callback();
}
}
function doSomethingElse() {
}
doSomething(doSomethingElse);
あなたはすでにあなたがやりたい投稿何をしないのですか?私はここで何が欠けていますか? –
+1を-1にします。この質問は他のものと同じように有効です。 – echo
万が一、もっとコードを教えたり、何をしようとしているのか教えてください。 – Nosredna