【发布时间】:2020-07-09 01:30:07
【问题描述】:
在调用外部 api 以在我的 node/express 后端的循环中获取信息时遇到一些问题。我需要从循环中获取的信息,以便从端点获取正确的数据。当我遍历数据并进行调用时,我得到了这个错误。
{ message: 'Too Many Requests Limit 30. Reset time 1594218437315',
status: 429 }
我有时会返回正确的数据,有时只会返回此消息。我需要打大约 10 000 个电话。我已经在 SO 上尝试了多个限制库和很多代码,但它几乎总是相同的结果,即错误消息或根本不起作用。
我想我需要一种方法一次发送大约 20-30 个请求,然后等待一秒钟左右,然后继续。或者还有其他更好的方法吗?我将如何实现这一目标?
const product = await NewProduct.find({});
product.map((item, index) => {
item.stores.map(async inner => {
inner.trackingUrl = await fetchRetry(inner.programId, inner.productUrl)
})
})
async function fetchRetry(id, urlToTrack) {
url1 = 'https://api.adtraction.com/v2/affiliate/tracking/link/?token=token';
const data = {
channelId,
programId: id,
shortLink: true,
url: urlToTrack
};
const options = {
method: 'POST',
headers: {
'Content-type': 'application/json',
Accept: 'application/json',
'Accept-Charset': 'utf-8',
},
body: JSON.stringify(data),
};
const res = await fetch(url, {
method: 'POST',
headers: {
'Content-type': 'application/json',
Accept: 'application/json',
'Accept-Charset': 'utf-8',
},
body: JSON.stringify(data),
});
const json = await res.json();
console.log(json) // Error
return json.trackingUrl;
}
【问题讨论】:
-
如果他们设置了限制,那么很难不设置一个计时器来遵守他们的限制,或者如果他们没有办法发送“批量”请求,请与他们核实(这有时是可能的)
-
您是否从服务器收到此错误?
-
@jinwar 是的,完全正确。那是我的问题,真的不知道该怎么做。
-
@Ibrahim 没错,我在响应中得到了错误。
标签: node.js express async-await