wake-up-neo.com

So fügen Sie einer Funktion in Javascript einen Rückruf hinzu

Ich habe zwei Javascript-Funktionen

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

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

Ich nenne es (in jQuery) so

 one ();
 two ();

Da Funktion zwei die Link-Datei von Funktion eins benötigt, muss ich sicherstellen, dass die Ausführung abgeschlossen ist ... also sollte die Funktion zwei im Callback von Funktion eins der Trick sein ... aber wie soll das gehen?

hinweis: Ich habe eine Warnung ('aaa') zwischen diesen beiden Funktionen eingefügt, damit die Funktion eine vollständig ausgeführt werden kann, und es hat gut funktioniert ... wenn die Warnung kommentiert (entfernt) ist, funktioniert nichts mehr!

22
menardmam

Sie müssen einen Rückruf nur verwenden, wenn Sie etwas asynchron ausführen. Andernfalls ist es egal, wie lange etwas dauert. Die nächste Funktion wird erst ausgeführt, wenn die erste Funktion abgeschlossen ist.

Ein Callback übergibt einfach eine Funktion als Argument und ruft sie dann auf, wenn Sie fertig sind.

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

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

one(two);

Wenn Sie sind etwas asynchron ausführen, benötigen Sie natürlich etwas, das Sie darüber informiert, wann es abgeschlossen ist (z. B. ein Ereignis wird ausgelöst).

46
Quentin

Einfach:

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

Versuche dies,

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

fuction2;

});

Hier ist fuction1 Ihre erste aufzurufende Funktion und fuction2 Ihre zweite Funktion.

4
Jinesh

Ich denke, es ist einfach, wenn der Browser wartet, bis der Prozess in "one ()" abgeschlossen ist, bevor die nächste Befehlszeile ausgeführt wird. Der Eisberg traf titanisch, weil er nicht wartet. Dann das ausführen:

one(two) // while two is the callBack parameter

ist nichts anderes als:

one()
two()

Ich schlage vor, ein setInterval zu verwenden.

function one(){
    //--- Write the file to disk
    //.....................
}

function runTwo(){
    if (check_the_written_file_existence){
         clearInterval(t)
         two();
    }
}
var t = setInterval("runTwo()",500)

Der wichtigste Punkt ist, dass, wenn ein Ereignis ausgelöst wird, wenn der "lange Prozess" in der Funktion "one ()" ausgeführt wurde, die Funktion zwei nur an dieses Ereignis gebunden werden muss. Es sei denn, Sie müssen das Ergebnis nach jeder Zeit überprüfen, bis es wirklich fertig ist.

0