如何在node.js中的函数内一次写两个操作?

时间:2017-11-17 04:13:02

标签: javascript node.js

我的数据库中有两个表,我想使用nodejs

获取两个带有一个函数的数据

我的表名是ContactGroup和Group

我的代码:

exports.getNewGroup = function (req, res) {
    ContactGroup.findAndCountAll({
        attributes: ['id', [sequelize.fn('COUNT', sequelize.col('group.id')),
            'contactCount'
        ]],
        include: [{
            model: Group,
        }],
    }).then(seenData => {
        console.log('seenData:', seenData);
    });


    Group.findAll().then(function (data) {
        return res.status(200).send(data);
    }).catch(function (err) {
        return res.status(400).send(err.message);
    });
};

像上面的代码一样,我正在编写ContactGroup.findandcount和Group.findall,我通过postman检查了这个api,但只有一个在这里工作, 我希望他们两个都在工作?帮助我!

3 个答案:

答案 0 :(得分:1)

你拿一个全局数组或对象并以下面的方式使用它

exports.getNewGroup = function (req, res) {
    var globalObj={};
        ContactGroup.findAndCountAll({
            attributes: ['id', [sequelize.fn('COUNT', sequelize.col('group.id')),
                'contactCount'
            ]],
            include: [{
                model: Group,
            }],
        }).then(seenData => { globalObj.seendata=seenData;return Group.findAll();})


        .then(function (data) {
    globalObj.alldata=data;
            return res.status(200).send(globalObj);
        }).catch(function (err) {
            return res.status(400).send(err.message);
        });
    };

答案 1 :(得分:0)

将您的代码更改为此并尝试:

exports.getNewGroup = function (req, res) {
ContactGroup.findAndCountAll({
    attributes: ['id', [sequelize.fn('COUNT', sequelize.col('group.id')),
        'contactCount'
    ]],
    include: [{
        model: Group,
    }],
}).then(seenData => {
    console.log('seenData:', seenData);
    Group.findAll().then(function (data) {
       return res.status(200).send(data);
    }).catch(function (err) {
       return res.status(400).send(err.message);
    });
 });    
};

答案 2 :(得分:0)

虽然其他人的答案是正确的但是我看到有两个独立异步函数所以最好将它们并行填充(更多性能增益),如下所示。

exports.getNewGroup = function (req, res) {
    p1= ContactGroup.findAndCountAll({
        attributes: ['id', [sequelize.fn('COUNT', sequelize.col('group.id')),
            'contactCount'
        ]],
        include: [{
            model: Group,
        }],
    })
    p2 =Group.findAll() 

    Promise.all([p1,p2]).then(values => { 
        console.log(values);
    })
    .catch(function (err) {
       return res.status(400).send(err.message);
    });


};