Node.js
Unikaj piekła zwrotnego
Szukaj…
Moduł asynchroniczny
Źródło jest dostępne do pobrania z GitHub. Alternatywnie możesz zainstalować za pomocą npm:
Instalacja npm $ --save async
Oprócz korzystania z Bower:
$ bower zainstaluj asynchronicznie
Przykład:
var async = require("async");
async.parallel([
function(callback) { ... },
function(callback) { ... }
], function(err, results) {
// optional callback
});
Moduł asynchroniczny
Na szczęście biblioteki takie jak Async.js istnieją, aby spróbować rozwiązać problem. Async dodaje cienką warstwę funkcji na wierzch kodu, ale może znacznie zmniejszyć złożoność, unikając zagnieżdżania wywołań zwrotnych.
W Async istnieje wiele metod pomocniczych, których można używać w różnych sytuacjach, takich jak szereg, równoległość, wodospad itp. Każda funkcja ma konkretny przypadek użycia, więc poświęć trochę czasu, aby dowiedzieć się, która pomoże w jakich sytuacjach.
Async jest tak dobry, jak wszystko inne, ale nie jest idealny. Bardzo łatwo jest dać się ponieść emocjom, łącząc serie, równoległe, wieczne itp., W tym momencie wracasz do miejsca, w którym zacząłeś od niechlujnego kodu. Uważaj, aby nie przedwcześnie zoptymalizować. To, że kilka zadań asynchronicznych można uruchamiać równolegle, nie zawsze oznacza, że powinny. W rzeczywistości, ponieważ Węzeł jest tylko jednowątkowy, równoległe uruchamianie zadań przy użyciu Async ma niewielki lub żaden wzrost wydajności.
Źródło jest dostępne do pobrania ze strony https://github.com/caolan/async . Alternatywnie możesz zainstalować za pomocą npm:
Instalacja npm $ --save async
Oprócz korzystania z Bower:
$ bower zainstaluj asynchronicznie
Przykładowy wodospad Asynca:
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!');
});