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)
}