Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在节点js中的一个函数内调用多个函数_Javascript_Node.js - Fatal编程技术网

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

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

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

我尝试使用“.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;
控制器文件:

/*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通过组合多个异步函数,然后发送响应。