Heim >Web-Frontend >js-Tutorial >Async und Versprechen in JS erklärt
Hinweis: Alle Konzepte hängen zusammen. Um also eine Sache zu wissen, müssen Sie auch andere Konzepte verstehen
Angenommen, Sie haben eine Schleife in Ihrem Programm, deren Abschluss Jahre dauert. Jetzt haben Sie zwei Möglichkeiten: entweder weitermachen oder warten. Wenn Sie warten möchten, wird dies als Blockierungscode betrachtet. Wenn nicht, dann haben Sie keine Wahl? Mal sehen.
//blocking code let sum = 0; for(let i = 1;i<Number.MAX_SAFE_INTEGER;i++){ for(let j = 1;j<Number.MAX_SAFE_INTEGER;j++){ sum = i+j; } } console.log(sum); // above program is dummy and does not serve any purpose
Wie Sie sehen können, werden Programme, die sich darunter befinden, nicht ausgeführt, bevor der Vorgang abgeschlossen ist. Jetzt müssen wir jahrelang warten, bis die Summe ausgeführt wird, und der Benutzer könnte einige wichtige Dinge (andere Funktionen) verpassen.
Um solche Situationen zu umgehen, können wir for und console.log(sum) in eine Datei einfügen, die parallel zu unserem Code laufen kann, und warten, bis wir ihr ein grünes Signal geben. Dies wird als asynchron bezeichnet. Asynchroner Code wird parallel zum Hauptcode ausgeführt und erst nach Abschluss des Hauptcodes.
Wenn der asynchrone Code einen anderen asynchronen Code enthält. Es läuft erst, wenn die äußeren Ziele erreicht sind.
Was wird das Ergebnis des folgenden Programms sein?
// will inner ever run ? if yes then why (ask gemini/gpt) setInterval(()=>{ console.log("outer"); setInterval(()=>{ console.log("inner"); },1000) },1000)
setTimeout(()=>{ console.log("outer"); setTimeout(()=>{ console.log("inner"); for(let i = 1;i<1000;i++){} console.log("inner finished"); },0) console.log("outer finishes"); },0) console.log("i will run first");
Ausgabe
i will run first outer outer finishes inner inner finished
Hinweis: Mit dem obigen Code können Sie festlegen, dass der äußere Block jetzt als Hauptcode und der innere als asynchroner Code fungiert.
Sie sehen sogar console.log("i will run first") geschrieben nach dem Hauptcode, der zuerst ausgeführt wird. Wie ? Dies wird als nicht blockierender oder asynchroner Code bezeichnet. Die Hauptfunktionalität Ihres Programms wird dadurch nicht beeinträchtigt. Lassen Sie zeitraubende Vorgänge in Ihrer Anwendung wie Schreiben und Lesen durchführen.
Das Schlüsselwort „await“ ist immer in eine asynchrone Funktion eingeschlossen und lässt keinen anderen Code darunter ausführen, bis es abgeschlossen ist. Async und Await sind Schlüsselpaare. Noch eine Sache: Warten Sie immer vor Funktionen, die Versprechen zurückgeben, und schließen Sie es immer in den Try-Catch-Block ein.
async function myPromise(){ try{ await doSomething(); // a function that return promise console.log("Your file is successfully created"); //only runs when promise is accepted } catch(err){ console.log(err); // if promised is rejected; } } myPromise(); console.log("first");
Ausgabe
# consider promise to be successful first Your file is successfully created
Bisheriges Verständnis (Schlussfolgerung):
Finden Sie etwas, das in allen Anwendungsfällen gemeinsam ist?
Ja, die Ausführung aller Anwendungen dauert einige Zeit.
Versprechen gibt uns die Superkraft, mit einer solchen Situation angemessen umzugehen. Auch hier gehen Promises und Async-Await Hand in Hand.
Ein asynchrones Schlüsselwort außerhalb einer Funktion, die Promise zurückgibt, ist rein optional. Siehe Code unten...
fetchData
// trying to mimic as a server response function fetchData(success=false){ return new Promise((resolve,reject)=>{ if(success){ setTimeout(()=>{ resolve("fetched successfully"); },5000) // execute after 5 sec } else reject("server is not responding"); }) } // lets consider fetchData is in-built function
Haupt
/* lets consider fetchData is a in-built function that gets data from other server. We are passing success para to just mimic the server otherwise it does not serve any purpose here. */ async function getData(){ try{ let result = await fetchData(true); console.log(result) //fetched successfully } catch(err){ console.log(err); // in case of rejection } } getData(); // load other code
Der andere Code wird auch unabhängig davon ausgeführt, ob Daten abgerufen wurden oder nicht. Es verbessert die Leistung und die Qualität unseres Codes.
error-handling-by-aryan
Das obige ist der detaillierte Inhalt vonAsync und Versprechen in JS erklärt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!