2017-08-24 9 views
0

Kann jemand den asynchronen await in einer Funktion verbergen?versteckt den async erwarten


bearbeiten, da es, dass ich unklar scheint war.

Was ich tun möchte, ist die await in einer Funktion wickeln, so dass die äußere Hauptfunktion nicht wie ein Asynchron-Code aussehen: asyncFunction: eine Asynchron-Funktion. hideAsync: Eine Wrapper-Funktion, die das Hinzufügen des "await" -Schlüsselworts aus dem Hauptcode überflüssig macht. run: der Hauptcode, der wie eine lineare Funktion aussehen wird.

Hoping diesmal mir klar: -/

var someSome = {}; 
 

 
someSome.wait = ms => new Promise(resolve => setTimeout(resolve, ms)); 
 

 
someSome.asyncFunction = async (el) => { 
 
    await someSome.wait(1000); 
 
    alert("step 1"); 
 
} 
 

 
someSome.hideAsync = async function(){ 
 
    await someSome.asyncFunction(); 
 
    alert("step 2"); 
 
} 
 

 
someSome.run = async function(){ 
 
    someSome.hideAsync(); 
 
    alert("step 3"); 
 
} 
 
someSome.run();

+1

Was meinst du verstecken? .. was erwartetes Ergebnis war danach. Sie haben das "erwarten" auf 'someSome.hideAsync() verpasst;' ist das absichtlich ?. – Keith

Antwort

0

Wenn ich verstehe, was Sie fragen, Sie wollen wissen, ob es möglich ist, einen Asynchron-Betrieb in einem Funktionsaufruf zu tun, ohne Verwenden Sie das await Schlüsselwort davor und warten Sie immer noch, bis dieser Aufruf abgeschlossen ist, bevor Sie zur nächsten Zeile weitergehen.

Die Antwort ist nein, asynchrone Operationen explizit behandelt werden müssen, entweder durch await oder andere Mittel wie .then(). Sie können auf jeden Fall Async-Funktionen ohne await oder aufrufen, aber die Ausführung wird nicht warten, bis der Vorgang abgeschlossen ist, wird es sofort zu den nächsten Zeilen fortsetzen.

Das Verständnis von asynchronen Operationen ist in JavaScript äußerst wichtig, da sie immer wieder auftauchen. Sie können nicht ignoriert und wie synchrone Funktionen behandelt werden. Mit await ist so nah wie Sie können, und ist viel sauberer als es einmal mit Callback-Hölle oder .