title: Catch block does not execute immediately after exception is thrown in try block
body: <p>I have a bit of Javascript code, which is not behaving as I'd expect it to. Can someone tell me what is going on here?</p>
  <p>Here's a simplified version:</p>
  <pre><code>    let recordsProcessed = 0
      await parser(fileBuffer,
  
        // Process row
        async (row: Record&lt;string, any&gt;) =&gt; {
          recordsProcessed += 1
          try {
            console.log('Processing record', recordsProcessed)
            await processRow(row)
          } catch (e) {
            console.log('Failure at record', recordsProcessed)
          }
        }
      ) 
  
      async parser(fileBuffer: Buffer, rowCb: Function, ...) : Promise&lt;number&gt; {
        ... 
        return new Promise((resolve, reject) =&gt; {
          parseFile(fileBuffer, options)
            .on('error', (error:any) =&gt; reject(error))
            .on('data', async row =&gt; await rowCb(row))
            .on('end', (count: any) =&gt; resolve(count))
        })
        ...
      }
  </code></pre>
  <p>The parser() here is an async function, but it also calls some callbacks passed to it (I'm only showing one here, but there are multiple). It calls the rowCb() callback for each row in a file.</p>
  <p>It's the try/catch block within the async callback which is not behaving as I'd expect. I'm using a test file, with three rows, which will cause every call to processRow() to throw an exception. So, I'd expect the output from the console.logs to be:</p>
  <pre><code>Processing record 1
  Failure at record 1
  Processing record 2
  Failure at record 2
  Processing record 3
  Failure at record 3
  </code></pre>
  <p>But instead I'm getting this:</p>
  <pre><code>Processing record 1
  Processing record 2
  Processing record 3
  Failure at record 3
  Failure at record 3
  Failure at record 3
  </code></pre>
  <p>Why is this happening? Since I'm awaiting processRow(), shouldn't it be in the same scope as the try/catch block, and therefore the catch() should be processed immediately after the processRow() throws an exception?</p>