В моем проекте я использую async
для асинхронных запросов к базе данных и у меня есть этот кусок кода:асинхронной не возвращает данные в обратный вызов после того, как мангуст обновить
async.auto({
one: function(callback){
getFriendsIds(userId, callback)
},
two: ['one', function(callback, results){
getFriendsDetails(results.one, callback);
}],
final: ['one', 'two', function(callback, results) {
res.status(200).send(results.two);
return;
}],
}, function(err) {
if (err) {
sendError(res, err);
return;
}
});
Метод возвращения идентификаторов друзей выглядит следующим образом :
function getFriendsIds(userId, callback) {
var query = User.findOne({_id: userId});
query.exec(function(err, user) {
if(err) {
callback(err);
return;
}
return callback(null, user.friendsIds);
});
}
Он отлично работал. Функция вернула идентификаторы друзей, и я использовал их в «двух» блоке асинхронного вызова.
После модернизации mongoose
от 4.3.7
до 4.7.8
он прекратил работать. Я начал получать предупреждение Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead
, и идентификаторы не возвращались в обратном вызове.
Так что я добавил bluebird
пакет к проекту и подключил его к mongoose
. Теперь предупреждение исчезло, но идентификаторы все еще не возвращены в обратном вызове.
Я также обновил async
до последней версии, но это тоже не помогло.
Есть ли что-нибудь еще, что я должен сделать, чтобы сделать эту работу?
сделал вас попробовал такие обещания, mongoose.promise = require ('bluebired), mongoose.Promise = global.Promise, mongoose .Promise = require ('q'). Обещание? –