Node.js
Callback Hölle vermeiden
Suche…
Async-Modul
Die Quelle kann von GitHub heruntergeladen werden. Alternativ können Sie mit npm installieren:
$ npm install --save async
Neben der Verwendung von Bower:
$ bower async installieren
Beispiel:
var async = require("async");
async.parallel([
function(callback) { ... },
function(callback) { ... }
], function(err, results) {
// optional callback
});
Async-Modul
Zum Glück gibt es Bibliotheken wie Async.js, um das Problem einzudämmen. Async fügt Ihrem Code eine dünne Schicht von Funktionen hinzu, kann jedoch die Komplexität erheblich reduzieren, indem die Rückrufverschachtelung vermieden wird.
In Async gibt es viele Hilfsmethoden, die in verschiedenen Situationen verwendet werden können, z. B. Serien, Parallel, Wasserfall usw. Jede Funktion hat einen bestimmten Anwendungsfall. Nehmen Sie sich also etwas Zeit, um herauszufinden, welche in welchen Situationen hilfreich ist.
So gut wie Async auch ist, es ist nicht perfekt. Es ist sehr einfach, sich durch das Kombinieren von Serien, Parallelen, für immer usw. mitreißen zu lassen. Dann sind Sie wieder da, wo Sie mit chaotischem Code angefangen haben. Seien Sie vorsichtig, um nicht vorzeitig zu optimieren. Nur weil einige asynchrone Aufgaben parallel ausgeführt werden können, müssen sie nicht immer ausgeführt werden. Da der Knoten nur aus einem einzigen Thread besteht, führt die parallele Ausführung von Tasks bei Verwendung von Async kaum zu einer Leistungssteigerung.
Die Quelle steht unter https://github.com/caolan/async zum Download zur Verfügung. Alternativ können Sie mit npm installieren:
$ npm install --save async
Neben der Verwendung von Bower:
$ bower async installieren
Asyncs Wasserfall Beispiel:
var fs = require('fs');
var async = require('async');
var myFile = '/tmp/test';
async.waterfall([
function(callback) {
fs.readFile(myFile, 'utf8', callback);
},
function(txt, callback) {
txt = txt + '\nAppended something!';
fs.writeFile(myFile, txt, callback);
}
], function (err, result) {
if(err) return console.log(err);
console.log('Appended text!');
});