Node.js
Избегайте обратного вызова ада
Поиск…
Асинхронный модуль
Источник доступен для загрузки из GitHub. Кроме того, вы можете установить с помощью npm:
$ npm install --save async
Также, используя Bower:
$ bower install async
Пример:
var async = require("async");
async.parallel([
function(callback) { ... },
function(callback) { ... }
], function(err, results) {
// optional callback
});
Асинхронный модуль
К счастью, библиотеки, такие как Async.js, существуют, чтобы попытаться сдержать проблему. Async добавляет тонкий слой функций поверх вашего кода, но может значительно снизить сложность, избегая разворота обратного вызова.
В Async существует много вспомогательных методов, которые могут использоваться в разных ситуациях, таких как серия, параллель, водопад и т. Д. Каждая функция имеет конкретный прецедент, поэтому потребуется некоторое время, чтобы узнать, какой из них поможет в каких ситуациях.
Как и Async, как ничто, это не идеально. Его очень легко увлекать, объединяя ряды, параллельно, навсегда и т. Д., После чего вы вернетесь туда, где вы начали с грязного кода. Будьте осторожны, преждевременно оптимизируйте. Просто потому, что несколько асинхронных задач могут выполняться параллельно, не всегда означает, что они должны. В действительности, поскольку Node является только однопоточным, одновременные запущенные задачи при использовании Async практически не имеют прироста производительности.
Источник доступен для загрузки с https://github.com/caolan/async . Кроме того, вы можете установить с помощью npm:
$ npm install --save async
Также, используя Bower:
$ bower install async
Водопад Асинка Пример:
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!');
});