循环遍历节点js中的结果集

时间:2019-05-16 14:28:26

标签: node.js oracle

我有一个查询,该查询返回节点控制器中结果集的数组。现在,我要遍历结果,并且需要为每个结果集调用一个不同的函数。如何在Node中实现这一目标。

我是节点上的一只新蜜蜂,找不到解决方法。

下面是我的路由器文件:

/*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.getMgrData);

module.exports = router;

下面是我的控制器:

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

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

//Function to get Manager data from youCoach DB
async function getMgrData(req,res,next){

    try{
        /*Get total items*/
        const presult = await database.simpleExecute(`SELECT a.username, a.id, a.email, a.dept_id, b.deptno, b.dept_name from emp a LEFT JOIN dept b ON a.dept_id = b.id`);
        const prows = presult.rows;
        console.log("Rows ="+prows);
        res.json(prows);

        **// Here I want to write a for loop for above result and call a different function for each row.**         

    } catch (err) {
        console.log("Error ===="+err);
        next(err);
    }

};
module.exports.getMgrData = getMgrData;

先谢谢了。

1 个答案:

答案 0 :(得分:2)

您可以使用 async js 进行循环并管理代码的执行。对于数据结果循环,您可以使用async.js中的async.eachOf非常容易实现。在一个循环中,您可以根据结果编写业务逻辑。

这是文档链接:https://caolan.github.io/async/docs.html#eachOf

检查以下async.eachOf的代码实现,希望对您有所帮助。

    /*jslint node:true*/
    var express = require('express');
    var router = express.Router();
    var bodyParser = require('body-parser');
    const database = require('../services/database.js');
    // Import events module
    var events = require('events');
    var async = require("async");

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

    //Function to get Manager data from youCoach DB
    async function getMgrData(req,res,next){
        try{
            /*Get total items*/
            const presult = await database.simpleExecute(`SELECT a.username, a.id, a.email, a.dept_id, b.deptno, b.dept_name from emp a LEFT JOIN dept b ON a.dept_id = b.id`);
            const prows = presult.rows;
            let finalResult = [];
            async.eachOf(prows, function(prow, key, eachCallBack) {
                finalResult[key] = // output;
                eachCallBack();
            }, function(err, result){
                if(err) {
                    console.log("Error ===="+err);
                    next(err);
                } else {
                    res.json(finalResult);
                }
            })
        } catch (err) {
            console.log("Error ===="+err);
            next(err);
        }
    };
    module.exports.getMgrData = getMgrData;