1
我有一个脚本,查找数据库中没有图像大小的酒店,然后测试几个维度,请求该图像并将它分配给酒店,如果它发现它,但我不明白为什么我得到这个错误。异步eachLimit和RangeError:超出最大调用堆栈大小
RangeError: Maximum call stack size exceeded
下面是代码:(SQL查询返回100K行)
async.waterfall([
function(cb) {
console.log('-- start --');
connection.query('SELECT id,image_url FROM hotels WHERE image_size IS NULL', function(err, hotels) {
if (err) return console.log(err);
return cb(null, hotels);
});
},
function(hotels, cb) {
var success = 0;
async.eachLimit(hotels, 10, function(hotel, callback) {
var flag = false;
var test = ['_w.jpg','_z.jpg','_y.jpg', '_b.jpg'];
var index = 0;
var url = hotel.image_url;
var size = '0';
async.whilst(function() {
return flag === false && index <= test.length
}, function(while_callback) {
if (!hotel.image_url) return while_callback();
var current_url = hotel.image_url.replace('_b.jpg', test[index]);
request.get(current_url, function(err, res, body) {
index += 1;
if (res.statusCode === 200) {
flag = true;
url = current_url;
size = current_url.match(/[wzyb]/).toString();
success += 1;
}
return while_callback();
});
}, function(err, n) {
if (err) return callback(err);
connection.query('UPDATE hoteles SET ? WHERE ?', [{ image_url: url, image_size: size }, { id: hotel.id }], function(err, result) {
if (err) return callback(err);
console.log(hotel.id, size, success)
return callback();
});
});
}, function(err) {
if (err) return cb(err);
console.log('-- done --');
return cb();
});
}], function(err, result) {
if (err) return console.log(err);
return console.log(result);
});