2017-07-13 4 views
-1

Ich bin sicher, dass dies ein einfaches Problem ist, aber ich weiß nicht, wie ich es lösen kann.Warten auf Funktion endet in einer anderen Funktion in Javascript

Ich habe zwei Funktionen und ein Objekt in Javascript (NodeJS) wie folgt aus:

var auxmap = new Map(); 
    function one(){ 
    for(var i...){ 
    //init map and do something 
    two(i,params); 
    } 

} 
    function two(i,params){ 
    //create array from params called auxarray 
    map(i) = auxarray 
} 

meine Frage ist, ob ich bis Funktion zwei beenden sie die Ausführung dieser Funktion eine Wartezeit tun, wie in einem C# -Programm und wie kann ich das machen?

+2

Willkommen bei Stack Overflow! Bitte nimm die [Tour], schau dich um und lies dir die [Hilfe] durch, insbesondere [* Wie stelle ich eine gute Frage? *] (/ Help/how-to-ask) Es ist gar nicht klar was du fragst. Was machen diese Funktionen? –

+1

Wie gezeigt, wird "one" absolut auf "two" warten (vorausgesetzt, Sie nennen 'eins' irgendwo. JavaScript ist standardmäßig synchron. Wenn 'two' einen * asynchronen * Prozess startet und Sie auf das Ergebnis warten wollen davon in 'one', ** can not **: http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call (aber du kannst scheint mit 'async' /' warte') –

+0

Welche Version von ** nodejs ** benutze ich? Ich nehme an, dass 'function two' asynchron ist. TJ hat Recht, dass es eine Menge unklarer Dinge in deiner Frage gibt. Vielleicht schaue hier https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function – codtex

Antwort

0

Ja, Sie können! Wie Sie vielleicht wissen, führt der Knoten alle seine Operationen asynchron für I/O durch (das ist eine der Hauptstärken). Daher, um zu tun, was Sie fordern, sollten Sie einen Blick auf Rückrufe und verspricht. Da die Gemeinschaft derzeit gegenüber Versprechen zu bewegen, werde ich hier auf diesen Link verlassen, so dass Sie ein wenig mehr über sie lernen können:

Javascript Promises

Für Ihren speziellen Fall, werde ich basierend auf Versprechungen hier eine einfache Lösung bieten:

var auxmap = new Map(); 
function one(){ 
    for(var i...){ 
    //init map and do something 
    two(i,params).then(function(){ //Function one waits for two to end 
     //do something or end 
    }); 
    } 
} 
function two(i,params){ 
return new Promise(function(resolve, reject){ 
    //create array from params called auxarray 
    map(i) = auxarray; 
    resolve('Two finished'); 
} 
} 

Hoffe, das hilft!

Verwandte Themen