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