我是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)没有被调用。
答案 0 :(得分:1)
您的createMgrRec
和getManagersNames
函数都返回承诺,因此它们异步运行。
一个人解决后,您将以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' })
}
}
我希望这会有所帮助。