2013-06-08 2 views
0

, имеющие реальный медведь времени с тем, как структурировать вызовы БД, чтобы они были вынуждены загружаться перед остальными функциями. Это просто. Вам нужно найти пользователя в БД, прежде чем я начну действовать с ним.Проблемы с входами в Mongoose async

Так что я пытаюсь параллельно async.js с вызовами Mongoose прямо сейчас. Я пробовал 85 различных способов сделать это, чтобы быть честным.

Вот код:

async.parallel ([ 

    function(callback) { 

     mongoose.connect(ConnString, function(error) { 

     console.log("connection ok...") 

     callback(); 

    }); 
    }, 

function(callback) { 

    console.log("second function"); 

    callback(); 

}], 

function(error){ 

    console.log("in the error callback"); 

}); 

Я всегда буду получать те же результаты.

second function 
out of async... continuing 
connection ok... 
in the error callback 

Это простейшая разбивка, которую я могу предоставить, чтобы помочь. Я потратил 6 часов на эту проблему, ваша помощь приветствуется!

+0

FWIW: 'async.parallel' запускает ваши функции, хорошо, параллельно друг другу. Я думаю, вы хотели использовать 'async.series', где следующий шаг запускается только тогда, когда предыдущий закончен. – robertklep

ответ

0

Если вы пытаетесь сделать это, убедитесь, что вы подключились к db-соединению, прежде чем вы выдаете утверждения, тогда не беспокойтесь. mongoose отправляет ваши запросы до тех пор, пока они не будут готовы.

также убедитесь, что вы понимаете последствия использования соединения по умолчанию (mongoose.connect) вместо отдельного (mongoose.createConnection).

main github page of mongoose содержит некоторые интересные чтения.

также, свободный async.параллельный блок ... это не нужно. просто напишите код как есть.

======================== РЕДАКТИРОВАНИЕ ============ ===================

если что-то вроде следующего помогает:

/* dependencies */ 
var mongoose = require('mongoose'); 

/* schema definition */ 
var UserSchema = new mongoose.Schema({ 
    phone: { type: String, required: true } 
    // other user details here... 
}); 

/* model definition */ 
var User = mongoose.model('User', UserSchema); 

/* static methods */ 
UserSchema.statics.isAuthorized = function (phone, cb) { 
    User.find({ phone : { $in : [phone] } }).exec(function(err, data) { 
     // logic & callback here... 
    }); 
}; // eo isAuthorized(..) 

// export the user. 
module.exports = User; 

Теперь вы можете выполнить User.isAuthorozed (...)

+0

Моя проблема состояла в том, что запросы БД не всегда были готовы. Я установил модель, которая будет экспортировать объект аутентификации ... этот объект содержал запрос, чтобы найти пользователя и свойство, указывающее, что он действителен. Когда я ссылался на другую модель, например: if (LoggedIn) {}, она всегда возвращалась бы false, поскольку запросы не выполнялись? – chuckjones242

+0

можете ли вы прикрепить код? –

+0

Это был больший первый поток: в app.js ' logic = require ('./ models/logic.js'); var Authorize = authenticate (req.param ('From')); if (LoggedIn) {// здесь логика} ' в logic.js ' module.exports.Authorize = Authorize; функция Авторизовать (телефон) { \t this.IsAuthorized = false; mongoose.connect (ConnString, функция (ошибка) { \t вар запроса = User.find ({}) \t .где ('Телефон'). В ([телефон]) \t query.exec (функция (ERR , результат) { \t \t если (result.length! = 0) { \t \t \t { \t \t это.IsAuthorized = истина; \t \t \t \t \t \t mongoose.connection.close(); – chuckjones242

Смежные вопросы