Asynchrone Programmierpraxis von when.js unter node.js_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.
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.
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.
var saveRss = function(data, callback) {
fs.writeFile('rss.txt', data, 'utf8', function(err) {
Rückruf(err);
});
}
Integration:
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:
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:
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
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。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

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

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 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? 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

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.

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.

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
