JSFiddle - React, Tailwind, and code Playground
JavaScript
var RateLimiter = require('limiter').RateLimiter;
var limiter = new RateLimiter(27, 'second', true);
const createCsvWriter = require('csv-writer').createArrayCsvWriter;
let final = [xxxxx, xxxxxx, xxxxx]
final = final.reduce((accumulator, item, index) => {
//limit the API calls according to the limiter defined above
return new Promise(resolve => {
// if limiter is a function this is ok
// if limiter is a promise, then this suggestion is called an antipattern because i could have used `return limiter ... ` directly on the promise
limiter.removeTokens(1, () => {
ExternalAPIcall({number: item}, (error, response) => {
if (error) {
console.error(error)
resolve(error);
} else {
console.log(response.status_message)
let outp = []
outp[index] = response.status_message
resolve(outp);
}
})
})
}).then(outp => {
if (outp instanceof Error) {
return Promise.resolve(outp);
} else {
return csvWriter.writeRecords(outp) // i am not familiar with csvWriter but i assume this will APPEND a new line.
}
})
}, Promise.resolve());