Heim Web-Frontend js-Tutorial Asynchrone Programmierpraxis von when.js unter node.js_node.js

Asynchrone Programmierpraxis von when.js unter node.js_node.js

May 16, 2016 pm 04:29 PM
node.js 异步编程

Gehen Sie von einem Geschäftsszenario aus:

Rufen Sie die RSS-Datei über die RSS-Adresse ab und speichern Sie sie in der Datei. Die RSS-Adresse wird in der Datei gespeichert.

Um dieses Szenario abzuschließen, müssen Sie drei Aufgaben erledigen:

1. Lesen Sie die RSS-Adresse aus der Datei.

2. Holen Sie sich RSS.

3. In Datei speichern.

Integrieren Sie diese drei Aufgaben endlich.

Vorbereitung:

Die Datei, in der die RSS-Adresse gespeichert ist, address.txt.

http://programmer.csdn.net/rss_programmer.html

Aufgabe 1:

Lesen Sie den Inhalt der RSS-Adressdatei und senden Sie ihn per Rückruf zurück.

Code kopieren Der Code lautet wie folgt:

var getRssAddress = function(path, callback) {
fs.readFile(path, {encoding: 'utf8'}, function (err, data) {
​ callback(err, data);
});
}

Mission 2:

Erhalten Sie RSS über die RSS-Adresse und geben Sie Fehler oder Daten per Rückruf zurück.

Code kopieren Der Code lautet wie folgt:

var getRss = function(url, callback) {
var data = '';
http.get(url, Funktion(res) {
res.on('data', function(chrunk) {
data = chrunk;
});
res.on('end', function() {
​​callback(null, data);
});
}).on('error', function(err) {
​ Rückruf(err, null);
});
}

Mission 3:

RSS in Datei speichern und Fehler durch Rückruf zurückgeben.

Code kopieren Der Code lautet wie folgt:

var saveRss = function(data, callback) {
fs.writeFile('rss.txt', data, 'utf8', function(err) {
​ Rückruf(err);
});
}

Integration:

Code kopieren Der Code lautet wie folgt:

getRssAddress('address.txt', function(err, data) {
if(err) {
console.log(err);
Zurück;
}
getRss(data, function(err, data) {
If(err) {
console.log(err);
Zurück;
}
SaveRss(data, function(err) {
If(err) console.log(err);
});
});
});

Der obige Code ist eine vollständig asynchrone Verarbeitung und verwendet den häufigsten Rückruf, um die Rückkehr der asynchronen Logik zu verarbeiten. Der Vorteil besteht darin, dass es sich um eine Standardschreibmethode handelt, die jeder problemlos akzeptieren kann. Die Behandlung von Ausnahmen ist mühsam und der Code ist nicht intuitiv, insbesondere wenn es um komplexe Geschäftslogik und mehrere Verarbeitungsaufgaben geht. Ebenen von Rückrufen können die Augen der Leute blenden und die Wartung des Codes erschweren.

when.js, eine der Implementierungen der Promise/A-Spezifikation, zielt auf diese Problemdomäne ab.

Werfen wir einen Blick auf den transformierten Code.

Mission 1:

Code kopieren Der Code lautet wie folgt:

var getRssAddress = function(path) {
var deferred = when.defer();
fs.readFile(path, {encoding: 'utf8'}, function (err, data) {
If (err) deferred.reject(err);
        deferred.resolve(data);
});

return deferred.promise;
}



Mission 2:

Code kopieren Der Code lautet wie folgt:

var getRss = function(url) {
  var deferred = when.defer();
    var data = '';
    http.get(url, Funktion(res) {
      res.on('data', function(chrunk) {
        data = chrunk;
      });
      res.on('end', function() {
        deferred.resolve(data);
      });
    }).on('error', function(err) {
      deferred.reject(err);
    });

    return deferred.promise;
}

任务3:

复制代码 代码如下:

var saveRss = function(data) {
  var deferred = when.defer();
  fs.writeFile('rss.txt', data, 'utf8', function(err) {
    if(err) deferred.reject(err);
    deferred.resolve();
  });

  return deferred.promise;
}


 

整合:

复制代码 代码如下:

getRssAddress('address.txt')
  .then(getRss)
  .then(saveRss)
  .catch(function(err) {
    console.log(err);
  });

解释:

promise/A规范定义的„Deferred/Promise“模型就是“发布/订阅者“模型,通过Deferred对象发布事件,可以是完成resolve事件,或者是失败Ablehnen事件;通过Versprechen对象进行对应完成或失败的订阅.

在Promises/A规范中,每个任务都有三种状态:Ausstellung (ausstehend), Auslieferung (erfüllt) und Auslieferung (abgelehnt)。

1.默认状态可以单向转移到完成状态,这个过程叫resolve,对应的方法是deferred.resolve(promiseOrValue);

2.默认状态还可以单向转移到失败状态,这个过程叫reject,对应的方法是deferred.reject(reason);

3.默认状态时,还可以通过deferred.notify(update)来宣告任务执行信息,如执行进度;

4行过程中.

按照上面的代码.

通过when.defer定义一个deferred对象.

var deferred = when.defer();
异步数据获取成功后,发布一个完成事件.

deferred.resolve(data);
异步数据获取失败后,发布一个失败事件.

deferred.reject(err);
并且返回Promise对象作为订阅使用.

return deferred.promise;
订阅是通过Promise对象的then方法进行完成/失败/通知的订阅.

getRssAddress('address.txt')
  .then(getRss)
Dann wird die Funktion onFulfilled, onRejected, onProgress

angezeigt

promise.then(onFulfilled, onRejected, onProgress)
上一个任务被resolve(data),onFulfilled函数就会被触发,data作为它的参数.

上一个任务被reject(reason),那么onRejected就会被触发,收到reason.

任何时候,onFulfilled和onRejected都只有其一可以被触发,并且只触发一次

对于处理异常, when.js也提供了极其方便的方法, then能传递错误, 多个任务串行执行时, 我们可Klicken Sie dann auf „Abgelehnt“ und dann auf „Abgelehnt“. fangen函数捕获任何一个任务的异常.

如此写法简单明了.

复制代码 代码如下:

getRssAddress('address.txt')
  .then(getRss)
  .then(saveRss)
  .catch(function(err) {
    console.log(err);
  });

Versprechen给异步编程带来了巨大的方便,可以让我们专注于单个任务的实现而不会陷入金字塔厄运, 以上代码仅仅是基本使用, when.js提供的功能远远不止本文提到的这些,具体参照官方API。

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie implementiert man asynchrone Programmierung mit C++-Funktionen? Wie implementiert man asynchrone Programmierung mit C++-Funktionen? Apr 27, 2024 pm 09:09 PM

Zusammenfassung: Asynchrone Programmierung in C++ ermöglicht Multitasking, ohne auf zeitaufwändige Vorgänge warten zu müssen. Verwenden Sie Funktionszeiger, um Zeiger auf Funktionen zu erstellen. Die Rückruffunktion wird aufgerufen, wenn der asynchrone Vorgang abgeschlossen ist. Bibliotheken wie boost::asio bieten asynchrone Programmierunterstützung. Der Praxisfall zeigt, wie man mit Funktionszeigern und boost::asio asynchrone Netzwerkanfragen umsetzt.

Asynchrone Programmierung von JavaScript-Funktionen: Wichtige Tipps für die Bewältigung komplexer Aufgaben Asynchrone Programmierung von JavaScript-Funktionen: Wichtige Tipps für die Bewältigung komplexer Aufgaben Nov 18, 2023 am 10:06 AM

Asynchrone Programmierung mit JavaScript-Funktionen: Grundlegende Fähigkeiten zur Bewältigung komplexer Aufgaben Einführung: In der modernen Frontend-Entwicklung ist die Bewältigung komplexer Aufgaben zu einem unverzichtbaren Bestandteil geworden. Asynchrone Programmierkenntnisse in JavaScript-Funktionen sind der Schlüssel zur Lösung dieser komplexen Aufgaben. In diesem Artikel werden die grundlegenden Konzepte und gängigen praktischen Methoden der asynchronen Programmierung von JavaScript-Funktionen vorgestellt und spezifische Codebeispiele bereitgestellt, um den Lesern zu helfen, diese Techniken besser zu verstehen und zu verwenden. 1. Grundkonzepte der asynchronen Programmierung Bei der traditionellen synchronen Programmierung ist der Code

So verwenden Sie ReactPHP für die asynchrone Programmierung in PHP So verwenden Sie ReactPHP für die asynchrone Programmierung in PHP Jun 27, 2023 am 09:14 AM

Da Webanwendungen immer komplexer werden, sind Programmierer gezwungen, asynchrone Programmierung zu übernehmen, um eine große Anzahl von Anforderungen und E/A-Vorgängen zu verarbeiten. PHP: HypertextPreprocessor ist keine Ausnahme. Um diesem Bedarf gerecht zu werden, hat sich ReactPHP zu einem der beliebtesten asynchronen Programmierframeworks für PHP entwickelt. In diesem Artikel besprechen wir, wie man mit ReactPHP asynchrone Programmierung in PHP durchführt. 1. Einführung in ReactPHP ReactPHP ist eine ereignisgesteuerte Programmierung

So implementieren Sie die asynchrone Nachrichtenverarbeitung in PHP So implementieren Sie die asynchrone Nachrichtenverarbeitung in PHP Jul 10, 2023 am 08:19 AM

So implementieren Sie die asynchrone Nachrichtenverarbeitung in PHP Einführung: In modernen Webanwendungen wird die asynchrone Nachrichtenverarbeitung immer wichtiger. Die asynchrone Nachrichtenverarbeitung kann die Leistung und Skalierbarkeit des Systems verbessern und das Benutzererlebnis verbessern. Als häufig verwendete serverseitige Programmiersprache kann PHP durch einige Technologien auch die asynchrone Nachrichtenverarbeitung implementieren. In diesem Artikel stellen wir einige Methoden zur Implementierung der asynchronen Nachrichtenverarbeitung in PHP vor und stellen Codebeispiele bereit. Verwenden von Message Queuing Message Queuing ist eine Möglichkeit, Systemkomponenten zu entkoppeln, sodass verschiedene Komponenten dies tun können

Vertiefendes Verständnis der neuen Funktionen von PHP8: Wie nutzt man asynchrone Programmierung und Code effizient? Vertiefendes Verständnis der neuen Funktionen von PHP8: Wie nutzt man asynchrone Programmierung und Code effizient? Sep 11, 2023 pm 01:52 PM

Vertiefendes Verständnis der neuen Funktionen von PHP8: Wie nutzt man asynchrone Programmierung und Code effizient? PHP8 ist die neueste Hauptversion der Programmiersprache PHP und bringt viele aufregende neue Funktionen und Verbesserungen mit sich. Eines der herausragendsten Features ist die Unterstützung der asynchronen Programmierung. Durch asynchrone Programmierung können wir die Leistung und Reaktionsfähigkeit bei gleichzeitigen Aufgaben verbessern. In diesem Artikel werfen wir einen detaillierten Blick auf die asynchronen Programmierfunktionen von PHP8 und stellen vor, wie man sie effizient nutzt. Lassen Sie uns zunächst verstehen, was asynchrone Programmierung ist. Im traditionellen synchronen Programmiermodell folgt der Code einer linearen Sequenz

Häufige Probleme und Lösungen bei der asynchronen Programmierung im Java-Framework Häufige Probleme und Lösungen bei der asynchronen Programmierung im Java-Framework Jun 04, 2024 pm 05:09 PM

3 häufige Probleme und Lösungen bei der asynchronen Programmierung in Java-Frameworks: Callback Hell: Verwenden Sie Promise oder CompletableFuture, um Callbacks intuitiver zu verwalten. Ressourcenkonflikt: Verwenden Sie Synchronisierungsprimitive (z. B. Sperren), um gemeinsam genutzte Ressourcen zu schützen, und erwägen Sie die Verwendung threadsicherer Sammlungen (z. B. ConcurrentHashMap). Nicht behandelte Ausnahmen: Behandeln Sie Ausnahmen in Aufgaben explizit und verwenden Sie ein Ausnahmebehandlungs-Framework (z. B. CompletableFuture.exclusionally()), um Ausnahmen zu behandeln.

Wie geht das Golang-Framework mit Parallelität und asynchroner Programmierung um? Wie geht das Golang-Framework mit Parallelität und asynchroner Programmierung um? Jun 02, 2024 pm 07:49 PM

Das Go-Framework nutzt die Parallelitäts- und Asynchronitätsfunktionen von Go, um einen Mechanismus zur effizienten Abwicklung gleichzeitiger und asynchroner Aufgaben bereitzustellen: 1. Parallelität wird durch Goroutine erreicht, sodass mehrere Aufgaben gleichzeitig ausgeführt werden können. 2. Asynchrone Programmierung wird über Kanäle implementiert kann ausgeführt werden, ohne den Hauptthread zu blockieren. Geeignet für praktische Szenarien wie die gleichzeitige Verarbeitung von HTTP-Anfragen, die asynchrone Erfassung von Datenbankdaten usw.

Die KI-Ära von JS ist da! Die KI-Ära von JS ist da! Apr 08, 2024 am 09:10 AM

Einführung in JS-Torch JS-Torch ist eine Deep-Learning-JavaScript-Bibliothek, deren Syntax PyTorch sehr ähnlich ist. Es enthält ein voll funktionsfähiges Tensorobjekt (kann mit verfolgten Farbverläufen verwendet werden), Deep-Learning-Ebenen und -Funktionen sowie eine automatische Differenzierungs-Engine. JS-Torch eignet sich für die Deep-Learning-Forschung in JavaScript und bietet viele praktische Tools und Funktionen zur Beschleunigung der Deep-Learning-Entwicklung. Image PyTorch ist ein Open-Source-Deep-Learning-Framework, das vom Meta-Forschungsteam entwickelt und gepflegt wird. Es bietet einen umfangreichen Satz an Tools und Bibliotheken zum Erstellen und Trainieren neuronaler Netzwerkmodelle. PyTorch ist einfach, flexibel und benutzerfreundlich konzipiert und verfügt über dynamische Berechnungsdiagrammfunktionen

See all articles