Javascript 在节点js中的一个函数内调用多个函数
我是新来的蜜蜂。我想在节点中的单个函数中调用多个函数,并想将所有函数结果集合并到单个数组中 我尝试使用“.then”并尝试catch方法,但没有成功。下面是我的代码 路由器文件:Javascript 在节点js中的一个函数内调用多个函数,javascript,node.js,Javascript,Node.js,我是新来的蜜蜂。我想在节点中的单个函数中调用多个函数,并想将所有函数结果集合并到单个数组中 我尝试使用“.then”并尝试catch方法,但没有成功。下面是我的代码 路由器文件: /*jslint node:true*/ var express = require('express'); var session = require('express-session'); var router = express.Router(); var bodyParser = require('body-p
/*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;
控制器文件:
/*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;
服务文件:
/*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)没有被调用。您的
createMgrRec
和getManagersNames
函数都返回承诺,因此它们异步运行
一旦解析,您将以res.status(200).json(…)
结束响应
您可以使您的getMgr
函数异步,然后在响应之前等待两个承诺:
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' })
}
}
我希望这会有所帮助。我认为这是因为
mgrapi.createMgrRec(context)。然后((resp)=>{res.status(200).json(resp);})
-一旦从createMgrRec()得到结果,就将响应返回给客户端,客户端当然会结束请求。您需要等待两个异步函数返回,然后将结果合并到一个响应中,以提供给client@ADyson,你能给我举个例子吗?你需要使用Promise.all()
-你可以找到很多例子online@sony通过组合多个异步函数,然后发送响应。