Я хотел бы отфильтровать массив на основе запроса мангуста. Тем не менее, я относительно новичок в node.js и асинхронном программировании. Мне известно, что Array.prototype.filter является синхронной функцией, а запросы mongoose являются асинхронными.
При поиске на этом сайте я обнаружил два следующих решения:
фильтрация массива с помощью функции, которая возвращает обещание - но это выглядит довольно сложно, и я пока не понимаю концепцию.
как ждать результата запроса мангуста? - сначала это решение выглядит вполне понятным, поэтому я попробовал
вот мой пример кода, основанного на втором подходе:
exports.create = function(req, res) {
async.filter(req.body.data.entries, function(item, callback){
MyCollection.findOne({'_id': item.id}, function(err, doc) {
callback(err == null && doc != null);
});
},
function(results){
req.body.data = results
// default controller to create a document in Mongo DB
return controller.create(Model, req, res);
});
};
Однако, похоже, это не работает. results
не соответствует отфильтрованному списку, как описано в ответе, но точно соответствует результату логического выражения функции обратного вызова. Я также проверил это в текущей асинхронной документации, чтобы увидеть, изменилось ли что-нибудь в функции filter , но не увидел никаких изменений.