我认为这很简单...但是我对着它砸了头。我正在我的“主”(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);
});
});
我实际上是从数据库查询中获取返回给调用函数的数据...!我觉得我今天学到了一些东西。
还需要确定如何从异步函数中返回“数组数组” ...这可能是明天的项目...
感谢我收到的所有回复...所有的帮助和帮助!