首页 > 解决方案 > 如何在节点js中调用同步函数

问题描述

我已经创建了一个用于从数据库 mysql 中获取记录的全局函数,但它的返回未定义
但是一旦我们在这个函数下传递静态数据,它就可以正常工作,

   methods.trendingPodData =   function (){
    var sql = "SELECT * from table1 where 1";
      con.query(sql, function (err, result, fields) {
        var myJSON = JSON.stringify(result);
        var hashtagsArray = JSON.parse(myJSON);
         //console.log(hashtagsArray);
         return hashtagsArray;      
   }); 
}

标签: javascriptnode.jsnode.js-connect

解决方案


创建承诺并在调用函数时解决它,

 methods.trendingPodData = () => {
  return new Promise((resolve, reject) => {
    var sql = "SELECT * from table1 where 1";
      con.query(sql, (err, result, fields) => {
        if(err) {
         return reject(err)
        }
        var myJSON = JSON.stringify(result);
        var hashtagsArray = JSON.parse(myJSON);
         //console.log(hashtagsArray);
         resolve(hashtagsArray);      
   }); 
 }
}

在调用函数时,

router.get('/GetPodHomeScreen', async (req, res) => {
 try {
  const allTrendingDataArray1 = await globalVar.data.trendingPodData(); 
  res.send(allTrendingDataArray1)
 } catch(error) {
  res.status(500).send(error)
 }
})

推荐阅读