在节点js的一个函数中调用多个函数

时间:2019-05-17 09:26:15

标签: javascript node.js

我是Node的新蜜蜂。我想在Node中的单个函数内调用多个函数,并希望将所有函数结果集合并到单个数组中。

我尝试使用“ .then”并尝试使用catch方法,但未成功。下面是我的代码。

路由器文件:

/*jslint node:true*/
var express = require('express');
var session = require('express-session');
var router = express.Router();
var bodyParser = require('body-parser');
const mgrDataCtrl = require('../controllers/mgrDataCtrl');
router.use(session());

// Use body parser to parse JSON body
router.use(bodyParser.json());

// Http Method: GET
router.route('/mgrData').get(mgrDataCtrl.getMgr);

控制器文件:

/*jslint node:true*/
var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');
const database = require('../services/database.js');
const mgrapi = require('../services/mgrDataSer.js');


function getMgr(req,res,next){
    const context = {};
    mgrapi.createMgrRec(context).then((resp) => {
        res.status(200).json(resp);
    }).catch((error) => {
        console.log(error);
    });

    mgrapi.getManagersNames().then((resp1) => {
        res.status(200).json(resp1);
    }).catch((error) => {
        console.log(error);
    });
};
module.exports.getMgr = getMgr;

服务文件:

下面是我从控制器调用的服务文件。

const database = require('../services/database.js');

async function createMgrRec(context) {

    let query = 'QUERY ONE';

    //console.log(query);
    const result = await database.simpleExecute(query, binds);
    return result.rows;
}
module.exports.createMgrRec = createMgrRec;


async function getManagersNames() {

    let query = `select firstname, lastname from employees where userid= 123`;

    //console.log(query);
    const result = await database.simpleExecute(query, binds);
    return result.rows;
}
module.exports.getManagersNames = getManagersNames;

我从控制台中的第一个函数(mgrapi.createMgrRec)获取结果。但是第二个函数(mgrapi.getManagersNames)没有被调用。

1 个答案:

答案 0 :(得分:1)

您的createMgrRecgetManagersNames函数都返回承诺,因此它们异步运行。

一个人解决后,您将以res.status(200).json(...)结束响应。

您可以使您的getMgr函数异步,然后在响应之前等待2个承诺:

async function getMgr(req,res,next) {
  const context = {}

  try {
    const resp1 = await mgrapi.createMgrRec(context)
    const resp2 = await mgrapi.getManagersNames()

    res.status(200).json({ resp1, resp2 })
  }
  catch(error) {
    console.log(error)
    res.status(500).json({ error: 'There was an error' })
  }
}

我希望这会有所帮助。