wrapAsync (...) не является функцией в MongoDB и Mongoose - PullRequest
1 голос
/ 26 марта 2019

Я пытаюсь выполнить два асинхронных запроса в MongoDB, используя Mongoose и ExpressJS.

exports.get_options_data = function (req, res) {
    var rooms = [];
    var areas = [];


    async.parallel({
        rooms : AddProperty.distinct("roomQty", function (err, data) {
            if (err)
                res.send({ code: '500', message: err });
            rooms = data;
        }),
        areas: AddProperty.distinct("area", function (err, data) {
            if (err)
                res.send({ code: '500', message: err });
            areas = data;
        })
    }, function(err, data){
        res.send({ code: '200', rooms: rooms, areas : areas });
    })
}

для этого я использую асинхронную параллель.Я установил async, используя npm i async

Я хочу выполнить оба этих запроса и отправить ответы на запросы вместе в виде комбинированного JSON.

, но при выполнении этого я получаю сообщение об ошибке:

TypeError: wrapAsync (...) не является функцией

Кроме того, есть ли лучший подход для того же?

Ответы [ 2 ]

1 голос
/ 26 марта 2019

async. parallel принимает массив функций, а не объект.

Обещания теперь поддерживаются в узле, поэтому вы можете просто использовать Promise.all в качестве замены.Вы можете превратить AddProperty.distinct в функцию, основанную на обещаниях, используя util.promisify

const util = require('util');
const addProperty = util.promisify(AddProperty.distinct);


Promise.all([
    addProperty('roomQty'),
    addProperty('area')
]).then((data){
    res.send({ code: '200', rooms: data[0], areas : data[1] });
}).catch(error => {
   res.send({ code: '500', message: error });
});
0 голосов
/ 26 марта 2019

Спасибо Энтони Винзлету и Нилу Ланну за ваш совет.В соответствии с вашими комментариями и рекомендациями, я посмотрел больше на async.parallel и решил с помощью кода ниже:

exports.get_options_data = function (req, res) {
    async.parallel({
        rooms : function (callback) {
            AddProperty.distinct("roomQty", function (err, response) {
                callback(err, response)
            })
        },
        areas : function (callback) {
            AddProperty.distinct("area", function (err, response) {
                callback(err, response)
            })
        }
    }, function (err, data) {
        if (err)
            res.send({ code: '500', message: err });
        res.send({ code: '200', data: data });
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...