我无法理解co以及如何在其他生成器中利用其功能。基本上我有一个需要执行SQL查询的生成器,然后在将它们输出到调用函数(在循环中)之前对每一行做一些复杂的事情。
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)
}
答案 0 :(得分: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) ;
})
})()
}
仍在寻找更好的答案。