web-dev-qa-db-ja.com

JavaScriptの関数にコールバックを追加する方法

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を完了しましたが、正常に機能しました...アラートがコメント(削除)されたとき、何も動作しなくなりました!

22
menardmam

コールバックを使用する必要があるのは、非同期で何かを実行している場合のみです。それ以外の場合、何かに時間がかかってもかまいません。次の関数は、最初の関数が完了するまで実行されません。

コールバックは、関数を引数として渡し、完了時にそれを呼び出すだけです。

function one (callback) {
   do something long... like writing jpgfile on disk
   callback();
}

function two () {
   do something fast... like show the file
}

one(two);

明らかに、もしare非同期で何かを行う場合、それが終了したときに通知する何か(イベントの発火など)が必要です。

48
Quentin

シンプル:

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);
13
Joe

これを試して、

$.when($.ajax(fuction1())).then(function () {

fuction2;

});

ここで、fuction1は最初に呼び出す関数で、fuction2は2番目の関数です。

4
Jinesh

ブラウザが「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をそのイベントにバインドする必要があるだけです。それ以外の場合は、実際に実行されるまで、何らかの方法で結果を確認する必要があります。

0