0
我正在尝试graphql。我从postgresql提取数据,除了在查询完成之前完成解析的一个问题之外,似乎每个工作都可以工作。我虽然我有我的查询承诺正常工作。在这里,我创建查询数据库我的课:返回结果后执行Graphql postgresql诺言
class PgPoolClient {
constructor(options) {
this.connection = options.connection;
}
query(sql, data = []) {
return new Promise((resolve, reject) => {
var pool = new pg.Pool(this.connection);
pool.connect((err, client, done) => {
if (err) {
reject({
code: 505,
message: err.message,
entrys: []
});
} else {
client.query(sql, data, (err, results) => {
done();
if (err) {
reject({
code: 404,
message: err.message,
entrys: []
});
} else {
resolve({
code: 200,
message: "ok",
entrys: results
});
}
});
}
});
pool.on("error", (err, client) => {
reject({
code: 505,
message: err.message,
entrys: {}
});
});
});
}
}
这里是我的graphql查询:
const Query = new GraphQLObjectType({
name: 'Query',
description: 'Root query object',
fields:() => ({
accounts: {
type: new GraphQLList(Account),
resolve(root, args) {
const parameters = [];
pg.query(`SELECT
id, token, user_identifier as userIdentifier, hash_password as hashPassword,
is_enabled as isEnabled, security_type_id as securityTypeID,
is_admin as isAdmin, ad_path as adPath, date_created as dateCreated,
date_modified as dateModified, modified_by as modifiedBy
FROM accounts.account`, parameters)
.then((result) =>
{
console.log(result.entrys.rows);
//return result.entrys.rows;
return [
{
id: '33333',
token: '111',
userIdentifier: 'test'
}
]
})
.catch((err) =>
{
console.log(err);
return err.message;
});
console.log('finished');
}
})
});
我评论了我的结果,只是想看看有关返回静态内容和看来,当它的内部()结果不会返回到graphisql(意味着在then()之前完成的解析)。与输出:
{
"data": {
"accounts": null
}
}
我能够把静态回报阵列的console.log(“完成”)来验证此,它正确地返回数据。
console.log('finished');
return [
{
id: '33333',
token: '111',
userIdentifier: 'test'
}
]
这表明了在graphiql:
{
"data": {
"accounts": [
{
"id": "33333",
"token": "111",
"userIdentifier": "test"
}
]
}
}
如此看来,我的承诺没有被娇娇。我的查询函数中是否存在导致决心不等待结果的错误?任何帮助,将不胜感激。
更新1
看来,如果我wrapp查询的承诺它的工作原理:
return new Promise((resolve, reject) => {
pg.query(`SELECT
id, token, user_identifier as userIdentifier, hash_password as hashPassword,
is_enabled as isEnabled, security_type_id as securityTypeID,
is_admin as isAdmin, ad_path as adPath, date_created as dateCreated,
date_modified as dateModified, modified_by as modifiedBy
FROM accounts.account`, parameters)
.then((result) =>
{
console.log(result.entrys.rows);
//return result.entrys.rows;
resolve([
{
id: '33333',
token: '111',
userIdentifier: 'test'
}
]);
})
.catch((err) =>
{
console.log(err);
reject(err.message);
});
我想我的问题是,如果我的查询功能已经被包裹在一个无极,为什么我必须再做一次?
感谢您的建议 – adviner