Heim >Web-Frontend >js-Tutorial >Erfahren Sie mehr über asynchrone Programmierung in Node.js und teilen Sie vier Lösungen

Erfahren Sie mehr über asynchrone Programmierung in Node.js und teilen Sie vier Lösungen

青灯夜游
青灯夜游nach vorne
2021-09-10 10:26:442613Durchsuche

Wenn es asynchrone E/A gibt, muss es asynchrone Programmierung geben! Lernen wir noch heute die asynchrone Programmierung in Node.js!

Erfahren Sie mehr über asynchrone Programmierung in Node.js und teilen Sie vier Lösungen

Überblick über die asynchrone Programmierung

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“]

Erfahren Sie mehr über asynchrone Programmierung in Node.js und teilen Sie vier Lösungen

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.

Erfahren Sie mehr über asynchrone Programmierung in Node.js und teilen Sie vier Lösungen

Asynchrone Programmierlösung

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

Erfahren Sie mehr über asynchrone Programmierung in Node.js und teilen Sie vier Lösungen

Frage: Wie löst man die Rückrufhölle?

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 Zustand

Weitere Informationen finden Sie in meinem vorherigen Blog-Beitrag

Eine vorläufige Studie zu Promise

Erfahren Sie mehr über asynchrone Programmierung in Node.js und teilen Sie vier Lösungen

Verwenden Sie Promise, um den Dateiinhalt zu lesen, der dem Hauptinhalt entspricht Feld in package.json

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.

Erfahren Sie mehr über asynchrone Programmierung in Node.js und teilen Sie vier Lösungen

Callback to Promise

Wie konvertiert man das Callback-to-Promise-Formular?

Sie können die Node-eigene Toolfunktion util.promisify verwenden

Sie 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.

Erfahren Sie mehr über asynchrone Programmierung in Node.js und teilen Sie vier Lösungen

Wenn mehrere Aufgaben

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 Lehrers

Erfahren Sie mehr über asynchrone Programmierung in Node.js und teilen Sie vier Lösungen

[Q] Im asynchronen Teil: Sagen wir: Bezüglich serieller und paralleler Verarbeitung habe ich eine Frage zur parallelen Verarbeitung. Wenn das parallele Szenario erfordert, dass jede asynchrone Aufgabe ausgeführt werden muss, unabhängig davon, ob andere Aufgaben erfolgreich sind oder fehlschlagen, und Fehler schließlich einheitlich behandelt werden müssen, tritt bei der Verwendung von Promise.all zur Verarbeitung mehrerer asynchroner Aufgaben der erste Aufgabenausführungsfehler auf zurückgegeben, wenn das Ergebnis. Wenn eine Anfrage fehlschlägt, wird der Fehler sofort zurückgewiesen, daher können wir Promise.all nicht verwenden, um dies umzusetzen. Promise verfügt über eine allSettled-Methode,

developer.mozilla.org/en-US/docs/…

Event

Veröffentlichungs- und Abonnementmodus, Node.js integriertes Ereignismodul

wie HTTP-Ereignis Überwachung

const { 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')

Erfahren Sie mehr über asynchrone Programmierung in Node.js und teilen Sie vier Lösungen

Originaladresse: https://juejin.cn/post/7005509871000895524Erfahren Sie mehr über asynchrone Programmierung in Node.js und teilen Sie vier Lösungen

Autor: YK Bacteria

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:掘金--YK菌. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen