与Sequelize一起循环

时间:2016-08-31 07:20:36

标签: 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 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始终为Promise,因此我无法将其用作停止条件

1 个答案:

答案 0 :(得分:1)

您可以使用.each() bluebird的{​​{1}}。

Promise

<强>更新

如果你不知道最大值,你可以做一些递归:

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