gpt4 book ai didi

node.js - 在异步循环中处理超时异常

转载 作者:搜寻专家 更新时间:2023-11-01 00:00:49 25 4
gpt4 key购买 nike

我创建了一个小脚本,请求我的 api 从网站获取信息(用作爬虫)。我从数据库中选择信息,并为每个结果调用我的 API。

var connection = mysql.createConnection(...);

query = "SELECT ... FROM ... WHERE ...";

connection.query(query, function(err, rows) {
async.each(rows, function(row, callback) {
formattedUrl = "http://localhost:3000/path?url=" + row['url'];
request({uri: formattedUrl, followAllRedirects: true, method: 'GET'}, function(error, response, body) {
...
callback(null, body);
}, function(err) {
//everything is done
})
})

问题是触发了太多的请求,所以很多都以超时异常结束(我的api负载太重了)。我应该怎么做才能解决这个问题?有没有一种方法可以创建最大的连接池(例如 50 个),就像我能够对数据库所做的那样?

最佳答案

正如@Krakig 的评论所建议的那样,您实际上应该像这样使用 async.forEachLimit:

var connection = mysql.createConnection(...);

query = "SELECT ... FROM ... WHERE ...";

connection.query(query, function(err, rows) {
async.forEachLimit(rows, 50, function(row, callback) {
formattedUrl = "http://localhost:3000/path?url=" + row['url'];
request({uri: formattedUrl, followAllRedirects: true, method: 'GET'}, function(error, response, body) {
...
callback(null, body);
}, function(err) {
//everything is done
})
})

这将执行 50 个并行请求,只有在一个请求完成后,才会执行下一个请求。

关于node.js - 在异步循环中处理超时异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33870851/

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