title: Synchronously call a REST API in JavaScript
body: <p>I am new to JavaScript and the npm world. I try to upload some data to my REST service via a REST post call. These data I fetch from a csv file. So far so good. On each fetched line I convert the data (for my needs) and call the REST API for uploading those. Since I have many line (approx. 700) the API gets called quite often consecutively. After some calls (guess 500 or so) I get an Socket error</p>
  
  <pre><code>events.js:136
        throw er; // Unhandled 'error' event
        ^
  
  Error: connect ECONNRESET 127.0.0.1:3000
      at Object._errnoException (util.js:999:13)
      at _exceptionWithHostPort (util.js:1020:20)
      at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1207:14)
  </code></pre>
  
  <p>I guess this is because I call the REST API to often. What I don't understand is: 
  How should I make the call synchronously in order to avoid so many connections? 
  Or should't I? 
  What would be the proper solution in JS for this?</p>
  
  <p>I have tried with Promises and so on but all this didn't helped but moved the issue some function calls priorly...</p>
  
  <p>This is my code:</p>
  
  <pre><code>readCsv()
  
  function readCsv() {
      var csvFile = csvFiles.pop()
      if (csvFile) {
          csv({ delimiter: ";" }).fromFile(csvFile).on('json', async (csvRow) =&gt; {
              if (/.*\(NX\)|.*\(NI\)|.*\(NA\)|.*\(WE\)|.*\(RA\)|.*\(MX\)/.test(csvRow["Produkt"])) {
                  var data = await addCallLog(
                      csvRow["Datum"],
                      csvRow["Zeit"],
                      csvRow["Menge-Zeit"],
                      csvRow["Zielrufnummer"],
                      csvRow["Produkt"]);
              }
          }).on('done', (error) =&gt; {
              //console.log('end')
              readCsv()
          })
      } else {
  
      }
  }
  
  function addCallLog(date, time, duration, number, product) {
      return new Promise(resolve =&gt; {
          args.data = { number: number, name: "", timestamp: getTimestamp(date, time), duration: getDuration(duration), type: "OUTGOING" }
          client.methods.addCallLog(args, (data, response) =&gt; {
              // client.methods.getCallLog((data, response) =&gt; {
              //     console.log(data)
              // })
              //console.log("addCallLog resolve")
              resolve(data)
          })
      })
  }
  </code></pre>
  
  <p>As you can see I had the same issue with reading more than one csv files in parallel. I solved this by calling recursively the readCsv function and pop the next file after the other when the file read was done. </p>