gpt4 book ai didi

node.js - 异步eachLimit和同时RangeError : Maximum call stack size exceeded

转载 作者:太空宇宙 更新时间:2023-11-04 02:19:37 27 4
gpt4 key购买 nike

我有一个脚本,可以在数据库中查找没有图像大小的酒店,然后测试几个维度,向该图像发出请求,如果找到它,则将其分配给酒店,但我不明白为什么会收到此错误。

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

最佳答案

该行是同步的,这意味着您正在执行递归。

if (!hotel.image_url) return while_callback();

替换为

if (!hotel.image_url) return process.nextTick(while_callback);

关于node.js - 异步eachLimit和同时RangeError : Maximum call stack size exceeded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34141737/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com