gpt4 book ai didi

javascript - NodeJS Promise,如何传播/减慢 http.get 调用

转载 作者:搜寻专家 更新时间:2023-10-31 23:10:49 26 4
gpt4 key购买 nike

我是 NodeJS 和 Promise 功能的新手,所以如果这是一个无知的问题,请保持礼貌。

我尝试先读取记录数据库,然后检查链接是否有效(寻找 200 响应)。对于我当前的测试数据,这应该始终返回 200 响应。我收到 302(请求过多)响应,然后开发服务器崩溃了。我需要放慢向数据库发送请求的速度,但我不知道该怎么做。在我看来, promise 会在解决后立即发送所有内容。

我曾尝试在 then 部分建立时间延迟,但无济于事。这是代码:

var http404Promise = new Promise(function(resolve, reject) {
var linkArray = new Array()

db.sequelize.query(photoQuery, {
replacements: queryParams
}).spread(function(photoLinks) {
photoLinks.forEach(function(obj) {
var siteLink = hostname + 'photo/' + obj.img_id
linkArray.push(siteLink)

//console.log(siteLink);
});

resolve(linkArray);
});
});

http404Promise.then(function(linkArray) {
linkArray.forEach(function(element) {
console.log(element);
http.get(element, function(res) {
console.log(element);
console.log("statusCode: ", res.statusCode); // <======= Here's the status code
}).on('error', function(e) {
console.log(element);
console.error(e);
})
})
});

最佳答案

forEach 中的正常超时不起作用的原因是 forEach 不等待超时完成。所以每个请求都同时等待,你不会得到你想要的惊人结果。
但是,您可以使用每个元素的索引来计算超时。

linkArray.forEach(function(element, index) {
setTimeout(function() {
console.log(element);
http.get(element, function(res) {
console.log(element);
console.log("statusCode: ", res.statusCode); // <======= Here's the status code
}).on('error', function(e) {
console.log(element);
console.error(e);
});
}, index * 500);
});

关于javascript - NodeJS Promise,如何传播/减慢 http.get 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49606948/

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