0

co と、その機能を別のジェネレーター内で活用する方法を理解するのに苦労しています。基本的に、SQLクエリを実行する必要があるジェネレーターがあり、各行で複雑なことを行ってから、それらを呼び出し元の関数に渡します(ofループ内)。

someGen コードは私には正しく見えず、期待どおりに動作していません。だから私の質問は2つあります。まず、ジェネレーター内で 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 に答える