suchen
HeimWeb-Frontendjs-TutorialAsynchrone 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.

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。

Stellungnahme
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
Von C/C nach JavaScript: Wie alles funktioniertVon C/C nach JavaScript: Wie alles funktioniertApr 14, 2025 am 12:05 AM

Die Verschiebung von C/C zu JavaScript erfordert die Anpassung an dynamische Typisierung, Müllsammlung und asynchrone Programmierung. 1) C/C ist eine statisch typisierte Sprache, die eine manuelle Speicherverwaltung erfordert, während JavaScript dynamisch eingegeben und die Müllsammlung automatisch verarbeitet wird. 2) C/C muss in den Maschinencode kompiliert werden, während JavaScript eine interpretierte Sprache ist. 3) JavaScript führt Konzepte wie Verschlüsse, Prototypketten und Versprechen ein, die die Flexibilität und asynchrone Programmierfunktionen verbessern.

JavaScript -Engines: Implementierungen vergleichenJavaScript -Engines: Implementierungen vergleichenApr 13, 2025 am 12:05 AM

Unterschiedliche JavaScript -Motoren haben unterschiedliche Auswirkungen beim Analysieren und Ausführen von JavaScript -Code, da sich die Implementierungsprinzipien und Optimierungsstrategien jeder Engine unterscheiden. 1. Lexikalanalyse: Quellcode in die lexikalische Einheit umwandeln. 2. Grammatikanalyse: Erzeugen Sie einen abstrakten Syntaxbaum. 3. Optimierung und Kompilierung: Generieren Sie den Maschinencode über den JIT -Compiler. 4. Führen Sie aus: Führen Sie den Maschinencode aus. V8 Engine optimiert durch sofortige Kompilierung und versteckte Klasse.

Jenseits des Browsers: JavaScript in der realen WeltJenseits des Browsers: JavaScript in der realen WeltApr 12, 2025 am 12:06 AM

Zu den Anwendungen von JavaScript in der realen Welt gehören die serverseitige Programmierung, die Entwicklung mobiler Anwendungen und das Internet der Dinge. Die serverseitige Programmierung wird über node.js realisiert, die für die hohe gleichzeitige Anfrageverarbeitung geeignet sind. 2. Die Entwicklung der mobilen Anwendungen erfolgt durch reaktnative und unterstützt die plattformübergreifende Bereitstellung. 3.. Wird für die Steuerung von IoT-Geräten über die Johnny-Five-Bibliothek verwendet, geeignet für Hardware-Interaktion.

Erstellen einer SaaS-Anwendung mit mehreren Mietern mit Next.js (Backend Integration)Erstellen einer SaaS-Anwendung mit mehreren Mietern mit Next.js (Backend Integration)Apr 11, 2025 am 08:23 AM

Ich habe eine funktionale SaaS-Anwendung mit mehreren Mandanten (eine EdTech-App) mit Ihrem täglichen Tech-Tool erstellt und Sie können dasselbe tun. Was ist eine SaaS-Anwendung mit mehreren Mietern? Mit Multi-Tenant-SaaS-Anwendungen können Sie mehrere Kunden aus einem Sing bedienen

So erstellen Sie eine SaaS-Anwendung mit mehreren Mietern mit Next.js (Frontend Integration)So erstellen Sie eine SaaS-Anwendung mit mehreren Mietern mit Next.js (Frontend Integration)Apr 11, 2025 am 08:22 AM

Dieser Artikel zeigt die Frontend -Integration mit einem Backend, das durch die Genehmigung gesichert ist und eine funktionale edtech SaaS -Anwendung unter Verwendung von Next.js. erstellt. Die Frontend erfasst Benutzerberechtigungen zur Steuerung der UI-Sichtbarkeit und stellt sicher, dass API-Anfragen die Rollenbasis einhalten

JavaScript: Erforschung der Vielseitigkeit einer WebspracheJavaScript: Erforschung der Vielseitigkeit einer WebspracheApr 11, 2025 am 12:01 AM

JavaScript ist die Kernsprache der modernen Webentwicklung und wird für seine Vielfalt und Flexibilität häufig verwendet. 1) Front-End-Entwicklung: Erstellen Sie dynamische Webseiten und einseitige Anwendungen durch DOM-Operationen und moderne Rahmenbedingungen (wie React, Vue.js, Angular). 2) Serverseitige Entwicklung: Node.js verwendet ein nicht blockierendes E/A-Modell, um hohe Parallelitäts- und Echtzeitanwendungen zu verarbeiten. 3) Entwicklung von Mobil- und Desktop-Anwendungen: Die plattformübergreifende Entwicklung wird durch reaktnative und elektronen zur Verbesserung der Entwicklungseffizienz realisiert.

Die Entwicklung von JavaScript: Aktuelle Trends und ZukunftsaussichtenDie Entwicklung von JavaScript: Aktuelle Trends und ZukunftsaussichtenApr 10, 2025 am 09:33 AM

Zu den neuesten Trends im JavaScript gehören der Aufstieg von Typenkripten, die Popularität moderner Frameworks und Bibliotheken und die Anwendung der WebAssembly. Zukunftsaussichten umfassen leistungsfähigere Typsysteme, die Entwicklung des serverseitigen JavaScript, die Erweiterung der künstlichen Intelligenz und des maschinellen Lernens sowie das Potenzial von IoT und Edge Computing.

Entmystifizieren JavaScript: Was es tut und warum es wichtig istEntmystifizieren JavaScript: Was es tut und warum es wichtig istApr 09, 2025 am 12:07 AM

JavaScript ist der Eckpfeiler der modernen Webentwicklung. Zu den Hauptfunktionen gehören eine ereignisorientierte Programmierung, die Erzeugung der dynamischen Inhalte und die asynchrone Programmierung. 1) Ereignisgesteuerte Programmierung ermöglicht es Webseiten, sich dynamisch entsprechend den Benutzeroperationen zu ändern. 2) Die dynamische Inhaltsgenerierung ermöglicht die Anpassung der Seiteninhalte gemäß den Bedingungen. 3) Asynchrone Programmierung stellt sicher, dass die Benutzeroberfläche nicht blockiert ist. JavaScript wird häufig in der Webinteraktion, der einseitigen Anwendung und der serverseitigen Entwicklung verwendet, wodurch die Flexibilität der Benutzererfahrung und die plattformübergreifende Entwicklung erheblich verbessert wird.

See all articles

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)
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung