我试图从SQL数据库的一系列(批处理)记录中generate
Observable
,我试图浏览数据库中的所有记录。我在node-js上使用ORM,Sequelize
返回包含在promise中的记录。
我已经定义了一个函数fetchbatch()
,该函数提取下一批并将结果Promise[Array[Record]]
和flatMap
返回给Observable
。
根据查询是否返回没有记录,我的条件(终止)被设置为promise的then块中的全局,但是永远不会调用回调,只会无限地返回promise,因此永远不会满足终止条件。有关如何处理的任何建议?这是代码的要点。
function getAllPaginated(conditions) {
var remaining = true;
var batch_size = 20;
function condition(){ return remaining; }
function selector(promisedBatchOfRecords){
//console.log(promisedBatchOfRecords);
//return Observable.fromPromise(promisedBatchOfRecords[1]);
return (promisedBatchOfRecords[1]);
}
function fetchBatch(batchNumberAndBatch) { // Returns [NextBatchNumber, Promise[Array[Record]]]
//console.log(remaining);
var batch_number = batchNumberAndBatch[0];
var offset = (batch_number - 1) * batch_size;
var rs = Records.findAll({where: conditions, offset: offset, limit: batch_size});
return [batch_number + 1,
rs.then(function(batch) {
console.log(batch.length);
if (!(batch.length > 0)){
remaining = false;
};
return batch.map(function(r){r.dataValues});
})];
}
return Observable.generate(fetchBatch([1, []]), condition, fetchBatch).flatMap(Ramda.identity/*over the promise*/).flatMap(Ramda.identity/*over the list*/);
}
var o = getAllPaginated({where: {a: "b"}})
o.subScribeOnNext(console.log)