当 Sequelize.findAll 在另一个文件上时,导出函数不 return 数据

Export Function does not return data when Sequelize.findAll on another file

我从请求查询中获取一些数据,并将请求的参数发送到 MySQL 数据库。当请求成功时,它 returns 数据(Main controller File)&代表该数据我需要调用其他模型 class 上存在的一些其他函数(通用方法文件)。 Common Method File 函数也有一些数据库依赖性。当我从 通用方法文件 进行调试时,它 return 的数据符合预期。但它不会 return 来自( 主控制器文件 )的任何数据。我现在该怎么办?

我也试过这个来转换异步等待,但它失败了。

主控制器文件

    const MenuData = require('../../models/common/MenuData');    
    const MenuModel = require('../../models/menu/menuModel');

    exports.listMenu = function(req, res) {
    let menu_id = 0;

    if(req.query.menuID){
        menu_id=req.query.menuID;
        MenuModel.findOne({
            where:{
                id:menu_id
            }
        }).then(menu=>{
                if(menu){
                    let menu_details =  MenuData.menuDetails(menu.dataValues);
                    if(menu_details){
                        return res.send({status: 200, message: menu_details});
                    }else{
                        return res.send({status: 302, message: "Data Not Found"});
                    }
                }
            }).catch(err =>{
            return res.send('error: '+err);
            });
    }else{
        return res.send('error: '+err);;
    }
};

常用方法文件

    const MenuRelationalModel = require('../../models/menu/menuRelationModel');

    exports.menuDetails=(content_data)=>{
     let data = [];
     if(content_data){
        if(content_data.id && content_data.id == 1){
            MenuRelationalModel.findAll({
                where:{
                    menu_id:content_data.id
                }
            }).then(menu_all_data =>{
                if(menu_all_data){
                    menu_all_data.map((menu_item,index)=>{
                        data.push(menu_item.dataValues);
                    })
                    return data;
                }

            }).catch(err =>{
                data.push(err);
                return data;

            });
        }

      }
   }

即将输出

   {
    "status": 302,
    "message": []
   }

预期输出

   {
     "status": 200,
     "message": [
        {
            "id": 4,
            "menu_id": 1,
            "parent_page_id": 0,
            "page_id": 1,
            "item_title": "Ongoing",
            "item_type": "category",
            "parent_type": "category"
        },
        {
            "id": 5,
            "menu_id": 1,
            "parent_page_id": 0,
            "page_id": 2,
            "item_title": "Completed",
            "item_type": "category",
            "parent_type": "category"
        }
      ]
   }

你的常用方法是异步的,所以你必须return一个承诺。

    const MenuRelationalModel = require('../../models/menu/menuRelationModel');

    exports.menuDetails=(content_data)=>{
      return new Promise((resolve, reject) => {
           let data = [];
           if(content_data){
              if(content_data.id && content_data.id == 1){
                 MenuRelationalModel.findAll({
                     where:{
                        menu_id:content_data.id
                     }
                 }).then(menu_all_data =>{
                    if(menu_all_data){
                        menu_all_data.map((menu_item,index)=>{
                             data.push(menu_item.dataValues);
                        })
                        resolve(data);
                     }
                 }).catch(err =>{
                      data.push(err);
                      resolve(data);    
                 });
             }
          } else {
              resolve(data);
          }
      })
   }

在你的主代码中

if (menu) {
  MenuData.menuDetails(menu.dataValues).then(menu_details => {
    if (menu_details) {
      return res.send({ status: 200, message: menu_details });
    } else {
      return res.send({ status: 302, message: "Data Not Found" });
    }
  });
}