Heim >Web-Frontend >js-Tutorial >Erfahren Sie mehr über asynchrone Programmierung in Node.js und teilen Sie vier Lösungen
Wenn es asynchrone E/A gibt, muss es asynchrone Programmierung geben! Lernen wir noch heute die asynchrone Programmierung in Node.js!
Unter dem Einfluss synchroner E/A gelang es dem vorherigen Single-Thread-Modell aufgrund langsamer E/A-Aufrufe nicht, CPU und E/A auf Anwendungsebene zu überlappen. Um den Lese- und Denkgewohnheiten von Programmierern Rechnung zu tragen, erfreut sich synchrones I/O seit vielen Jahren großer Beliebtheit. [Empfohlenes Lernen: „nodejs-Tutorial“]
Aber es gibt große Leistungsprobleme!
Node verwendet JavaScript und seine interne asynchrone Bibliothek, um die Asynchronität direkt auf die Geschäftsebene zu heben. Das größte Feature von Node ist das ereignisgesteuerte, nicht blockierende I/O-Modell. Nicht blockierende E/A können verhindern, dass CPU und E/A aufeinander warten, wodurch Ressourcen besser genutzt werden können.
Zweck: Lesen Sie den Dateiinhalt, der dem Hauptfeld in package.json entspricht.
Rückruf
Verwenden Sie Rückruffunktionen, um asynchrone E/A-Vorgänge auszuführen
Promise
Promise ist eine endliche Zustandsmaschine mit vier Zuständen, von denen die drei Kernzustände Ausstehend (suspendiert), Erfüllt ( Abgeschlossen), Abgelehnt (abgelehnt) und es gibt auch einen nicht gestarteten ZustandWeitere Informationen finden Sie in meinem vorherigen Blog-BeitragEine vorläufige Studie zu Promise
const fs = require("fs"); fs.readFile("./package.json", { encoding: "utf-8" }, (err, data) => { if (err) throw err; const { main } = JSON.parse(data); fs.readFile(main, { encoding: "utf-8" }, (err, data) => { if (err) throw err; console.log(data); }); });Wenn wir die vorherige Lösung mit Callback vergleichen, können wir sehen, dass es keine verschachtelten Rückrufe gibt und asynchrone Vorgänge über eine Reihe verketteter Aufrufe abgewickelt werden.
Callback to Promise
Wie konvertiert man das Callback-to-Promise-Formular? Sie können die Node-eigene Toolfunktion util.promisify verwendenSie können sie selbst implementieren:const { readFile } = require("fs/promises"); readFile("./package.json", { encoding: "utf-8" }) .then((res) => { return JSON.parse(res); }) .then((data) => { return readFile(data.main, { encoding: "utf-8" }); }) .then((res) => { console.log(res); });
await
await-Funktion verwendet Try Catch, um Ausnahmen abzufangen (achten Sie auf Parallelverarbeitung)function promisify(fn, receiver) { return (...args) => { return new Promise((resolve, reject) => { fn.apply(receiver, [ ...args, (err, res) => { return err ? reject(err) : resolve(res); }, ]); }); }; } const readFilePromise = promisify(fs.readFile, fs);awaits Syntax wird geschrieben Genau wie bei der synchronen Programmierung ist die Operation hier eine
serielleOperation, die Zeile für Zeile auf die Ausführung wartet.
parallel sein können, wäre es nicht gut, so zu schreiben. Das heißt, wir können Promise.all verwenden, um parallele Aufgaben auszuführen
Hier wird es auch eine kleine Frage geben, die ich dem Lehrer nach dem Unterricht gestellt habe, und dies ist die Antwort des Lehrersdeveloper.mozilla.org/en-US/docs/…
EventVeröffentlichungs- und Abonnementmodus, Node.js integriertes Ereignismodul
wie HTTP-Ereignis Überwachungconst { readFile } = require("fs/promises"); const start = async () => { const { main } = JSON.parse( await readFile("./package.json", { encoding: "utf-8" }) ); const data = await readFile(main, { encoding: "utf-8" }); console.log(data); }; start();
server on('request')
Originaladresse: https://juejin.cn/post/7005509871000895524
Weitere Kenntnisse zum Thema Programmierung finden Sie unter: Programmiervideos! !
Das obige ist der detaillierte Inhalt vonErfahren Sie mehr über asynchrone Programmierung in Node.js und teilen Sie vier Lösungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!