Сообщение от dmitry111
|
обходит несколько функций, результат которых идет к следующей и так до конца. Но на деле то, как с этим работать?
|
везде, где есть асинхронные шаги в логике
на практике чаще всего требовался
parallel
зацени этот говнокод. рылся по истории git'а, чтобы специально показать тебе пример:
Задача: добавить категорию (родительскую\дочернюю - зависит от параметра запроса)
async.waterfall([
// тут получаем родительскую категорию, если можно
function (done) {
if (fields.id == -1) {
done(null, null);
} else {
models.ProductCategoryModel.findById(fields.id, function (err, parentCategory) { done(err, parentCategory); });
}
},
// тут определяем дочернюю категорию
function (parentCategory, done) {
var newCategory;
if (parentCategory) {
newCategory = new models.ProductSubCategoryModel();
} else {
newCategory = new models.ProductCategoryModel();
}
newCategory.title = fields.new_category_name;
if (parentCategory) {
done(null, parentCategory, newCategory);
} else {
newCategory.save(function (err, newCategory) { done(err, parentCategory, newCategory); });
}
},
// связываем родительскую и дочернюю категории
function (parentCategory, childCategory, done) {
if (parentCategory) {
parentCategory.children.push(childCategory);
parentCategory.save(done);
} else {
done(null, null);
}
}
], function (err, parentCateg) {
if (err) return next(err);
allIsCompleted(err);
});
Сообщение от dmitry111
|
вот я везде callback расставил, но это делает код менее понятным, ИМХО
|
вот для ухода от
callback-hell используют async\Q\другое