私の問題に関連していると思われるdeferred
、 、done
、promise
およびなど の多くの投稿を読んで一日を過ごしました。callbacks
'how do i run function_2 after function_1'
したがって、物事が非同期で発生した場合、上記のアプローチのいずれかで具体的に処理する必要があるという概念を理解しています。
私のシナリオでは、ループと関数 function_1
が含まれています。$.each()
on.("load"...)
function_2
終わったら走りたいfunction_1
。
私が単に呼び出すと:
function_1();
function_2();
それらは順番に実行されません。私は、またはどちら$.each
かon.("load"...)
が非同期で動作するためだと推測しています。
私が電話しようとするfunction_2
と:
function_1.done(function_2());
私は得る:
TypeError: function_1.done is not a function.
function_1
これにより、その方法が利用できない と考えるようになります (そして、この時点で完全に軌道から外れている可能性があります)。
したがって、私の質問は、おそらく誤った仮定に基づいていますが、次のとおりです。
- どのタイプのオブジェクトから返されますか
function_1
(含まれている場合は$.each()
機能しon.("load"...)
ますか? - メソッド
function_1
が利用可能であることを強制できますか?done()
jsフィドル
を使用した上記のアプローチと同様に、動作しないdone()
acallback
を使用してみましたが、おそらく時間がかかるものを複製する私の方法は正しくありませんでした:
http://jsfiddle.net/rwone/xFX8a/2/
// function 1
function function_1(callback) {
// replicating something that takes a while
// alert("1");
setTimeout(function() {
$("p").append("This should happen first.");
}, 300);
callback();
}
//function 2
// only do this when function one has finished
function function_2() {
alert("This should happen second.");
};
// the call
function_1(function_2);