Как осуществить передачу данных в цепочке асинхронных функций?

Только начинаю осваивать Node.js. Из-за асинхронности столкнулся с проблемой при работе с базой.
Для БД использую mongoDB + mongoose на ноде.

Немного об архитектуре.

reqHandlers.js - тут лежат методы для обработки запросов.
dbHandlers.js - тут методы для работы с DB. Эти методы никак не могут влиять на запрос. Только вернуть данные из базы или текст ошибки.

Задача: Получить из БД данные из юзера и дальше как-то их использовать.

В результате родился такой код:
файл reqHanders.js - обработка запроса
function login(req,res,next) {
	var auth = req.body.auth;
	var promise = new Q;

promise.then(dbHandlers.login(auth.login.toLowerCase(),auth.password))
            .then(function makeSmt(user){
		    console.log("Q: "+user); //как организовать код, чтобы в переменной user лежали данные полученные из БД?
	     });
}


файл dbHandlers.js - запрос к базе
function login(login,password){

	var connection = mongoose.connection;
	if(!connection) return null;

	var users = User.users;

	users.find({'login':login,'password':password},function(err,user){		
		if(err){
			console.error(err.stack);
			//req.emit('error','userIncor');
			return;
		}
		if(user.length === 0){
			//req.emit('error','userIncor');
			return;
		}
		//req.emit('success',user[0]);
		return;
	});
}


Вопрос в том, как организовать код, чтобы в переменной user были данные, полученные из базы.

Подозреваю, что использую не все возможности Q. Буду рад советам и ссылкам.
  • Вопрос задан
  • 2681 просмотр
Решения вопроса 1
dizballanze
@dizballanze
Software developer at Yandex
Используйте async и будет вам счастье.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
corristo
@corristo
Ну или Promises/A+, как вариант
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы