从节点,mysql,koa中获取数据
我想从我的MySQL数据库中使用Koa和mysql
节点包得到一些数据。 我正在查看co-mysql ,但是自述文件build议直接使用thunkify
。 所以我做了以下几点:
const query = thunkify(connection.query.bind(connection));
这似乎工作,我现在可以做的:
app.use(function * main() { const races = yield query( "SELECT * FROM `races` where '2016-01-19' between start_date and end_date" )(function(err, rows) { // rows is the data I need }); });
但是,我无法find一种方法来将thunk中的行数据返回到我的种族variables中。 我logging它,并显示正确的数据,但是当我尝试将其传回时,它总是返回undefined。 我从callback中尝试了几个方法,但我似乎无法弄清楚:
return rows
生成yield rows
(使callback生成器函数) return yield rows
…
我经常得到: TypeError: You may only yield a function, promise, generator, array, or object, but the following object was passed: "undefined"
races
是一个数组,因为你正在使用thunkify
进行query
。 co返回一个数组,用于调用具有多个值的callback(null, 1, 2, 3)
函数(例如, callback(null, 1, 2, 3)
返回[1, 2, 3]
。
如果您是Promisify query
, races
将被分配到第一个返回的值,这似乎与您正在寻找的内联。
下面是一个在实践中显示的代码示例:
var co = require("co") var promisify = require("bluebird").promisify var thunkify = require("thunkify") function async(callback) { callback(null, 1, 2, 3) } var p = promisify(async) var t = thunkify(async) co(function*() { let x = yield p() let y = yield t() console.log(x) console.log(y) }).then(() => {})
运行时, x
的值为1
, y
的值为数组[1, 2, 3]
。
你可以在这里运行Tonic: https : //tonicdev.com/56ab7cfc879afb0c002c1d49/56ab7cfc879afb0c002c1d4a