Javascript 与Sequelize循环
我是异步编程的新手,目前正忙于这个简单的任务。我有一个Javascript 与Sequelize循环,javascript,node.js,sequelize.js,Javascript,Node.js,Sequelize.js,我是异步编程的新手,目前正忙于这个简单的任务。我有一个Mysql表,它有20k条记录,需要处理所有记录。当前的方法是成批循环记录 let limit = 100; let offset = 0; sequelize.query(`Select * from abc limit ${limit} offset ${offset}`, {type: sequelize.QueryTypes.SELECT}).then((records) => { // process return
Mysql
表,它有20k条记录,需要处理所有记录。当前的方法是成批循环记录
let limit = 100;
let offset = 0;
sequelize.query(`Select * from abc limit ${limit} offset ${offset}`, {type: sequelize.QueryTypes.SELECT}).then((records) => {
// process
return processResult;
});
因此,我需要增加while
循环中的偏移量
while (/*....*/) {
let p = sequelize.query(`Select * from abc limit ${limit} offset ${offset}`, {type: sequelize.QueryTypes.SELECT}).then((records) => {
// process records
return processResult;
});
offset += limit;
}
我的问题是while循环中要停止它的条件是什么?由于
p
始终是一个承诺
,因此我不能将其用作停止条件您可以使用蓝鸟的.each()
承诺
var Promise = require('bluebird');
let limit = 100;
let offset = 0;
let queryStrings = [];
let max = 20000;
while (offset < max) {
queryStrings.push(`Select * from abc limit ${limit} offset ${offset}`);
offset += limit;
}
let p = Promise.each(queryStrings, (queryString)=> {
return sequelize.query(queryString, {type: sequelize.QueryTypes.SELECT}).then((records) => {
// process records
if(/* need to break */){
return Promise.reject(new Error('...'));
}
return processResult;
});
});
谢谢亚当,但我没有最大值。20k只是估计值。以后会增加更多。循环应该像一个光标,逐批移动,如果批为空,则循环应该停止。问题是我不知道它什么时候会空
let _iterate = function (limit, offset) {
return sequelize.query(`Select * from abc limit ${limit} offset ${offset}`, {type: sequelize.QueryTypes.SELECT}).then((records) => {
// process records
if (/* need to break */) {
return Promise.reject(new Error(''));
}
offset += limit;
return _iterate(limit, offset);
});
};
let p = _iterate(100, 0);