2つのJavaScript関数があります
function one () {
do something long... like writing jpgfile on disk
}
function two () {
do something fast... like show the file
}
私はそれを(jQueryで)このように呼びます
one ();
two ();
関数2は関数1からのリンクファイルを必要とするため、実行が完了していることを確認する必要があります...したがって、関数1のコールバックで関数2を取得するのがコツですが、その方法は?
注:これら2つの関数の間にアラート( 'aaa')を挿入して関数1を完了しましたが、正常に機能しました...アラートがコメント(削除)されたとき、何も動作しなくなりました!
コールバックを使用する必要があるのは、非同期で何かを実行している場合のみです。それ以外の場合、何かに時間がかかってもかまいません。次の関数は、最初の関数が完了するまで実行されません。
コールバックは、関数を引数として渡し、完了時にそれを呼び出すだけです。
function one (callback) {
do something long... like writing jpgfile on disk
callback();
}
function two () {
do something fast... like show the file
}
one(two);
明らかに、もしare非同期で何かを行う場合、それが終了したときに通知する何か(イベントの発火など)が必要です。
シンプル:
function one (callback) {
do something long... like writing jpgfile on disk
if(callback) callback();
}
function two () {
do something fast... like show the file
}
one(two);
これを試して、
$.when($.ajax(fuction1())).then(function () {
fuction2;
});
ここで、fuction1は最初に呼び出す関数で、fuction2は2番目の関数です。
ブラウザが「one()」内のプロセスが完了するのを待ってから、コマンドの次の行を実行するのは簡単だと思います。氷山はそれが待たないためにタイタニック号を打ちました。次にこれを実行します:
one(two) // while two is the callBack parameter
と何も違いはありません:
one()
two()
SetIntervalの使用をお勧めします。
function one(){
//--- Write the file to disk
//.....................
}
function runTwo(){
if (check_the_written_file_existence){
clearInterval(t)
two();
}
}
var t = setInterval("runTwo()",500)
最も重要な点は、関数「one()」の「長いプロセス」が完了したときにイベントが発生した場合、関数2をそのイベントにバインドする必要があるだけです。それ以外の場合は、実際に実行されるまで、何らかの方法で結果を確認する必要があります。