我是异步编程的新手,目前仍然坚持这个简单的任务。我有一个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
,因此我无法将其用作停止条件
答案 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;
});
});