<!-- Click "Preview" for a more readable version --

Please read and follow the instructions before submitting an issue:

- Read all our documentation, especially the [README](https://github.com/axios/axios/blob/master/README.md). It may contain information that helps you solve your issue.
- Ensure your issue isn't already [reported](https://github.com/axios/axios/issues?utf8=%E2%9C%93&q=is%3Aissue).
- If you aren't sure that the issue is caused by Axios or you just need help, please use [Stack Overflow](https://stackoverflow.com/questions/tagged/axios) or [our chat](https://gitter.im/mzabriskie/axios).
- If you're reporting a bug, ensure it isn't already fixed in the latest Axios version.
- Don't remove any title of the issue template, or it will be treated as invalid by the bot.

⚠️👆 Feel free to these instructions before submitting the issue 👆⚠️
-->

#### Describe the bug
`axios.get(url)` is never returning the response when the following error occurs. It should have rejected the promise internally so that caller will get an exception. This issue is raised all the way to the process.on("uncaughtException"... I checked the http.js file line 251. I think if node throws an error here the settle will never be called. Do we need try-catch for the stream.end callback?

RangeError: Array buffer allocation failed
at new ArrayBuffer ()
at new Uint8Array ()
at new FastBuffer (internal/buffer.js:956:5)
at createUnsafeBuffer (buffer.js:152:12)
at allocate (buffer.js:419:10)
at Function.allocUnsafe (buffer.js:384:10)
at Function.concat (buffer.js:564:25)
at IncomingMessage.handleStreamEnd (/home/posintg/verifone-21.06.30/node_modules/axios/lib/adapters/http.js:251:37)
at IncomingMessage.emit (events.js:387:35)
at endReadableNT (internal/streams/readable.js:1317:12)

#### To Reproduce
It is hard to reproduce. You would have to cause exception at line below

```js
stream.on('end', function handleStreamEnd() {
    var responseData = Buffer.concat(responseBuffer); //error is thrown here
    if (config.responseType !== 'arraybuffer') {
      responseData = responseData.toString(config.responseEncoding);
      if (!config.responseEncoding || config.responseEncoding === 'utf8') {
        responseData = utils.stripBOM(responseData);
      }
    }

    response.data = responseData;
    settle(resolve, reject, response);
  });
// Example code here
 const response = await axios.get(url);
```
```js
// Example code here
 const response = await axios.get(url);
```

#### Expected behavior
Should reject the promise and so caller would be able to handle it.

#### Environment
 - Axios Version 0.21.1
 - Adapter HTTP
 - Browser n/a
 - Browser Version n/a
 - Node.js Version 14.17.2
 - OS: Debian 10
 - Additional Library Versions: n/a

#### Additional context/Screenshots
none

lib/adapters/http.js
var headerNames = {};
    Object.keys(headers).forEach(function storeLowerName(name) {
      headerNames[name.toLowerCase()] = name;
    });
    
    
    if ('user-agent' in headerNames) {
      
      if (!headers[headerNames['user-agent']]) {
        delete headers[headerNames['user-agent']];
      }
      
    } else {
      
      headers['User-Agent'] = 'axios/' + VERSION;
    }
    if (data && !utils.isStream(data)) {
      if (Buffer.isBuffer(data)) {
        
      } else if (utils.isArrayBuffer(data)) {
        data = Buffer.from(new Uint8Array(data));
      } else if (utils.isString(data)) {
        data = Buffer.from(data, 'utf-8');
      } else {
        return reject(createError(
          'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream',
          config
        ));
      }
      if (config.maxBodyLength > -1 && data.length > config.maxBodyLength) {