从节点中的thunk获取数据,mysql,koa
Getting data from thunk in node, mysql, koa
我想使用 Koa 和 mysql
节点包从我的 MySQL 数据库中获取一些数据。我正在查看 co-mysql,但自述文件建议直接使用 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
});
});
但是,我无法找到将 thunk 中的行数据 return/yield 放入我的 races 变量的方法。我记录了它,它显示了正确的数据,但是当我尝试将它传回时,它总是 returns 未定义。我已经从回调内部尝试了几种方法,但我似乎无法弄清楚:
return rows
yield rows
(使回调成为生成器函数)
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 returns 一个数组,用于任何使用多个值调用其回调的 thunk(即 callback(null, 1, 2, 3)
returns [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
我想使用 Koa 和 mysql
节点包从我的 MySQL 数据库中获取一些数据。我正在查看 co-mysql,但自述文件建议直接使用 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
});
});
但是,我无法找到将 thunk 中的行数据 return/yield 放入我的 races 变量的方法。我记录了它,它显示了正确的数据,但是当我尝试将它传回时,它总是 returns 未定义。我已经从回调内部尝试了几种方法,但我似乎无法弄清楚:
return rows
yield rows
(使回调成为生成器函数)
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 returns 一个数组,用于任何使用多个值调用其回调的 thunk(即 callback(null, 1, 2, 3)
returns [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