I am using an API that only allows 3 calls per second, and I need to make a lot of calls.
So i need to use SetTimeout with Await Axios inside a map, but i am not being able to achieve it.
I tried import setTimeout from promises, but no luck.
import { setTimeout } from 'timers/promises';
const apiCall = await Promise.all(data?.map( async item => {
await setTimeout(resolve, 334)
const numeroPedidoBling = item?.numeroPedidoBling;
const orderData = await axios.get(`${BLING_URL}/${numeroPedidoBling}/json?apikey=${APIKEY}`, { headers: {
'Accept': "application/json"
}})
return orderData?.data?.retorno;
}))
I tried in a lot of different ways, and now i am stuck in this piece of code.
Right now, it does not wait for the api calls and I receive erro 429 (too many calls)
How can I make it?
Obs.: 334 inside SetTimeout is 1,01 second
Edit.: I tried implementing rateLimit and for await together, but it also gives error 429, too many requests, follow the code:
try {
const result = [];
for await (let item of data) {
const numeroPedidoBling = item?.numeroPedidoBling;
const request = rateLimit(axios.create(), { maxRPS: 2 })
const orderData = await request.get(`${BLING_URL}/${numeroPedidoBling}/json?apikey=${APIKEY}`, { headers: {
'Accept': "application/json"
}})
result.push(orderData?.data?.retorno);
}
} catch (error) {
throw Error(error)
}