从节点,mysql,koa中的thunk获取数据

时间:2016-01-26 20:16:43

标签: mysql node.js node-mysql koa thunk

我想使用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中的行数据返回/生成我的races变量的方法。我记录它,它显示正确的数据,但当我尝试将其传回时,它总是返回undefined。我在回调中尝试了几种方法,但我似乎无法弄清楚:

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"

1 个答案:

答案 0 :(得分:1)

races是一个数组,因为thunkify用于query。 co为任何使用多个值调用其回调的thun返回一个数组(即。callback(null, 1, 2, 3)返回[1, 2, 3]

如果您要进行Promisify queryraces将仅被分配给第一个返回值,这似乎与您正在寻找的内容一致。

以下是在实践中展示它的代码示例:

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的值为1y的值为数组[1, 2, 3]

您可以在此处使用Tonic运行它:https://tonicdev.com/56ab7cfc879afb0c002c1d49/56ab7cfc879afb0c002c1d4a