我是graphql和node的新手,如果这真的很简单的话,我很抱歉,但是我正在尝试执行一个mysql查询,这样查询响应就会由graphql返回给客户端读取,我遇到的问题是,因为node-mysql是异步查询的,所以我不能直接得到查询响应。
经过一些修修补补我想通了,新代码:
var root = {
login: function({username, password}) {
var s = `select password from users where username='${username}'`;
var result = sql.query(s);
return result.then(response => {
return password == response[0].password
});
}
下面是sql.query
的函数定义
exports.query = function(s, callback) {
var promise = new Promise((resolve, reject) => {
con.query(s, function(err, response) {
if (err) throw err;
resolve(response);
});
});
return promise;
Graphql现在返回响应未定义。
2条答案
按热度按时间e1xvtsh31#
我个人使用的是
mysql
,但应该不会有太大的区别。所以我是这样做的:
将查询包含在Promise周围,Promise将在查询完成时解析。
然后在解析一个字段时,你只需要在promise上调用
.then
,然后做你想做的事情。ifmq2ha22#
我知道这是一篇老文章,但我发现这个主题有点混乱,我一直在研究不同的方法,这里展示了两种方法。一种比另一种(getQuery)稍微简单一些。我包括了一个变异的代码,尽管它与这个主题基本无关,但它演示了这种承诺复杂性如何不适用于返回变异的结果,只是说说而已。
文档描述了另一种方法,称为承诺 Package 器https://github.com/sidorares/node-mysql2#using-promise-wrapper。在我的情况下,这将需要一个顶级的等待,这并不真正适合我的需要,虽然有各种各样的变通办法,但我只是想对一个简单的问题尽可能简单的解决方案。