2016-12-31 7 views
0
function firstFunction(_callback){ 
    // do some asynchronous work 
    // and when the asynchronous stuff is complete 
    _callback();  
} 

function secondFunction(){ 
    // call first function and pass in a callback function which 
    // first function runs when it has completed 
    firstFunction(function() { 
     console.log('huzzah, I\'m done!'); 
    });  
} 

Dies ist ein Beispiel von dieser Website, ich möchte helfen, es zu verstehen.Rückrufe in NodeJS verstehen

Wenn ich eine Funktion habe, die 2 Zahlen summiert und die andere gibt es zurück. Also:

var z = 0; 
    function firstf (x, y, callback){ 
    z = x + y; 
     callback(); 
    } 
function secondf() { 
    console.log(z); 
} 

Ich verstehe nicht, wie das funktioniert? Wie mache ich es so, dass secondf wartet, bis firstf fertig ist mit Rückrufen?

Antwort

-1

Durch Nachbestellung Code:

bearbeiten Hergestellt Code async für Demozwecke

var z = 0; 
 

 
function firstf(x, y, callback) { 
 
    console.log("Inside firstf"); 
 
    z = x + y; 
 
    console.log("Will call callback in 1 second"); 
 
    // Lets make this function async. 
 
    setTimeout(function() { 
 
    console.log("Calling callback"); 
 
    callback(); 
 
    }, 1000); 
 
} 
 

 
function secondf() { 
 
    console.log("Inside secondf"); 
 
    console.log(z); 
 
    console.log("Leaving secondf"); 
 
} 
 

 

 
firstf(1, 2, secondf);

+0

Was passiert, wenn das Innere async ist? Ich meine, was wäre wenn asf async wäre? – Marodian

+0

hat den Code async gemacht - keine Änderung, außer einer Verzögerung von einer Sekunde. –

+0

Ist es sicher, immer etwas 1000ms zu verzögern? Wenn ich einen Async-Code ausgeführt habe, aber nach dem Beenden etwas anderes ausführen möchte, ist Timeout 1000 eine gute Wette? – Marodian

0

Nach 2 Funktion definieren, rufen Sie:

firstf(2,3,secondf); 

Folgen: z=2+3 dann call Funktion callback. Und jetzt funktionieren callback ~ secondf:

z=2+3 ; 
secondf(); 
0

Wenn Sie auf den zweiten Block wollen warten, bis der erste Block durchgeführt wird. Dann macht die Verwendung von Callback keinen Sinn. Da das Hauptkonzept von Callback ist, eine asynchrone Plattform bereitzustellen.

Ein Callback ist ein Funktionsaufruf bei der Fertigstellung einer bestimmten Aufgabe und verhindert somit Blockierungen, die auftreten können, wenn der erste Block lange Zeit braucht, um Daten zu laden.

Wenn also beide Blöcke asynchron arbeiten sollen, verwenden Sie den Rückruf, und um zu erreichen, was Sie fragen, rufen Sie einfach die zweite Funktion auf, nachdem die Aufgabe von Block 1 erledigt ist.

Zum besseren Verständnis geht über diesen Link, https://docs.nodejitsu.com/articles/getting-started/control-flow/what-are-callbacks/

Best of luck!

0

Sie können „Versprechen“ Konzept verwenden, um sicherzustellen, dass die secondf wartet, bis firstf getan wird:

function firstf(x,y){ 
    return new Promise(
     function (resolve, reject) { 
      resolve(x+y); 
     }); 
} 

function secondf(){ 
    firstf(x,y).then (function (result){ 
     console.log(result); 
    }); 
}