从单独的脚本返回数组

我认为这很简单...但是我对着它砸了头。我正在我的“主”(Node.js)脚本中调用一个函数来对Postgres数据库进行查询。我只是希望从函数返回一个数组(甚至更好的是“数组数组”),以便我可以处理这些变量。 Postgres处理是在不同的.js文件中处理的...我认为这段代码应该可以工作,但是不能:

我的数据库.js文件(“ queries.js”):

const config = {
...
//various settings
...
};

const Pool = require('pg').Pool;
const pool = new Pool(config);

const getUsers = function(request,response) {
 pool.query('SELECT * FROM users',(error,results) => {
  if (error) {
  throw error
  }

//    response.status(200).json(results.rows)

  return _findings = ["value1","value2"];

  })
}

module.exports = {
getUsers
}

我的“主要”脚本:

const db = require('./routes/queries');

app.get('/lookup',function (req,res) {

var _findings = [];
db.getUsers;

console.log("I FOUND A LOOKUP...!!!" + _findings[0] + _findings[1]);

});

我没有收到错误,但是返回的数组变量('_findings')报告为“未定义”。我知道Postgres查询是有效的,因为如果我“取消注释”“ response.status(200).json(results.rows)”,它将正确返回数据。我希望能够将返回的数组变量带入调用函数,然后从那里进行其他处理。是由于尝试从其他.js文件“返回”而引起的问题吗?谢谢您的任何建议。

根据给出的建议,我进行了一些修改...下面的代码已插入到我的“主”脚本中...并且可以正常工作:

async function mytest() {

// create a new promise inside of the async function
let promise = new Promise((resolve,reject) => {
setTimeout(() => resolve(true),1000) // resolve
});

// wait for the promise to resolve
let result = await promise;

// console log the result (true)
console.log(result);
}

app.get('/lookup',res) {

mytest();

});

如果我将'async'函数添加到数据库('queries.js')文件中以执行查询:

async function getSingle(req,res) {

// create a new promise inside of the async function
let promise = new Promise((resolve,reject) => {

 pool.query('SELECT * FROM users',results) => {
  if (error) {
  reject("db query failed");  //rejected
  }
  resolve(response.status(200).json(results.rows));  //fulfilled    
 })

});

// wait for the promise to resolve
let result = await promise;

}

但是,如果我将“主”脚本更改为:

app.get('/lookup',res) {

db.getSingle();

});

我收到“ db.getSingle不是函数”错误。赞赏有关如何调用异步数据库函数的正确语法的任何帮助...以及实际的异步函数是否正确...我认为是...但是我对'承诺/等待'概念不陌生/ async'...先谢谢您。

好的...此代码实际上正在工作...! 在我的数据库(queries.js)脚本中,我有:

function getFinals() {
 return new Promise(function(resolve,reject) {

  pool.query('SELECT * FROM users',results) => {
   if (error) {
   reject(new Error('Ooops,something broke!'));
   } else {
   resolve(results.rows);
   }
  })  //pool.query

 }); 
}

在我的主脚本中,我呼叫:

app.get('/lookup',res) {

 db.getFinals()
 .then(function(value) {
 console.log('Async success!',value);
 })
 .catch(function(err) {
 console.log('Caught an error!',err);
 });

});

我实际上是从数据库查询中获取返回给调用函数的数据...!我觉得我今天学到了一些东西。

还需要确定如何从异步函数中返回“数组数组” ...这可能是明天的项目...

感谢我收到的所有回复...所有的帮助和帮助!

weiqingtao 回答:从单独的脚本返回数组

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3088625.html

大家都在问