0

我无法理解 co 以及如何在另一个生成器中利用其功能。本质上,我有一个需要执行 SQL 查询的生成器,然后对每一行执行一些复杂的操作,然后再将它们输出给调用函数(在 of 循环中)。

someGen 代码对我来说看起来不正确,并且没有按预期工作。所以我的问题是双重的。首先,我如何利用生成器内部的 co-mysql 产生从每一行创建的对象。其次,我正在努力在哪里使用 co,更重要的是为什么。

无功能尝试:

const co = require('co')
    , mysql = require('co-mysql')
    , MYSQL_RECORD_SET = 0

let pool = null
let getConnectionPool = function(){
    if(!pool) pool = mysql.createPool(config.db);
    return pool
}

let someGen = function*() {
    co(function*() {
        let connection = getConnectionPool()
        let recordset = yield connection.query('SELECT ? as jobId', [ 99 ]);

        if (recordset && recordset[MYSQL_RECORD_SET]) {
            var jobs = _.map(recordset[MYSQL_RECORD_SET], function (row) {
                return {id: row.jobId }
            })
            yield jobs
        }
    })()
}

for (let job of someGen()) {
    console.log(job)
}
4

1 回答 1

0

这是“工作”——但不是我最初的目标。someGen 现在执行查询,但返回一个对象数组,而不是单独产生它们......

let someGen = function *() {
    let connection = getConnectionPool()
    let recordset = yield connection.query('SELECT ? as jobId', [ 99 ]);
    if (recordset && recordset[MYSQL_RECORD_SET]) {
        return _.map(recordset[MYSQL_RECORD_SET], function (row) {            
            return { jobId: jobId }
        })
    }
}

let runIt = function() {
    var doSomething = function(job){
    }

    co(function*() {
        let jobBatch = yield someGen()
        _.each(jobBatch, function(job){
            doSomething(job) ;
        })
    })()
}

仍在寻找更好的答案。

于 2014-09-24T21:29:06.147 回答