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());