微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 函数不返回pg-pool结果

我正在尝试使用pg-pool来查询Postgresql数据库.然后将此数据导出到Node.js express rest API.

这是我的出口功能.

exports.getDashboard = function(req, response, next) {
  let returnData = fetchData();
  return response.status(200).json(returnData);
};

哪个调用fetchData();

fetchData = async function() {
    let returnData = [];
    returnData.languages = await getLatestLanguages();
    return returnData;
};

哪个叫getLatestLanguages()

getLatestLanguages = function() {
  pgPool.pool.query(
    'SELECT * FROM "WordLanguage" ORDER BY id DESC LIMIT 30 ;',
    (error, results) => {
      if (error) {
        throw error;
      }
      return results.rows;
    }
  );
}

如果我在getLatestLanguages()返回results.rows之前放置了console.log(results.rows),那么我将数据记录到控制台.

但是,该对象未返回到fetchData.我通过在返回到exports.getDashboard()之前将returnData记录到控制台来测试它.

我相信我的问题与pg-pool的异步性质有关,所以我尝试使用await使我的函数异步,但这没有帮助.

我究竟做错了什么?

解决方法:

getLatestLanguages()应该返回一个promise.例如

getLatestLanguages = function() {
  return new Promise((resolve, reject) => {
    pgPool.pool.query(
      'SELECT * FROM "WordLanguage" ORDER BY id DESC LIMIT 30 ;',
      (error, results) => {
        if (error) {
          reject(error);
        }
        resolve(results.rows);
      }
    );
  });
};

fetchData()是异步的,因此应该等待

exports.getDashboard = async function(req, response, next) {
  let returnData = await fetchData();

  return response.status(200).json({ languages: returnData.languages });
};

还要确保以上述正确的格式返回returnData.languages而不是… json(returnData);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐