

O AWS SDK para JavaScript v2 chegou ao fim do suporte. Recomendamos migrar para o [AWS SDK para JavaScript v3](https://docs.aws.amazon.com//sdk-for-javascript/v3/developer-guide/). Para ver detalhes e informações sobre como migrar, consulte este [anúncio](https://aws.amazon.com/blogs//developer/announcing-end-of-support-for-aws-sdk-for-javascript-v2/).

# Usar um listener de evento do objeto de solicitação
<a name="using-a-response-event-handler"></a>

Se você não criar e passar uma função de retorno de chamada anônimo como parâmetro quando chamar o método de objeto de um serviço, a chamada do método gera um objeto `AWS.Request`, que deve ser enviado manualmente usando o método `send`.

Para processar a resposta, você deve criar um listener de evento para o objeto `AWS.Request` para registrar uma função de retorno de chamada para a chamada do método. O exemplo a seguir mostra como criar o objeto `AWS.Request` para chamar um método de objeto de serviço e o listener do evento para uma devolução bem-sucedida.

```
// create the AWS.Request object
var request = new AWS.EC2({apiVersion: '2014-10-01'}).describeInstances();

// register a callback event handler
request.on('success', function(response) {
  // log the successful data response
  console.log(response.data); 
});

// send the request
request.send();
```

Depois de chamado o método `send` no objeto `AWS.Request`, o manipulador de eventos é executado quando o objeto de serviço recebe um objeto `AWS.Response`.

Para obter mais informações sobre o objeto `AWS.Request`, consulte [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Request.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Request.html) na Referência de API. Para obter mais informações sobre o objeto `AWS.Response`, consulte [Usar o objeto de resposta](the-response-object.md) ou [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Response.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Response.html) na Referência de API.

## Encadear vários retornos de chamada
<a name="response-chaining-callbacks"></a>

Você pode registrar vários retornos de chamada em qualquer objeto de solicitação. É possível registrar vários retornos de chamada para diferentes eventos ou para o mesmo evento. Além disso, você pode encadear retornos de chamada conforme exibido no exemplo a seguir.

```
request.
  on('success', function(response) {
    console.log("Success!");
  }).
  on('error', function(response) {
    console.log("Error!");
  }).
  on('complete', function() {
    console.log("Always!");
  }).
  send();
```

## Eventos de conclusão do objeto de solicitação
<a name="request-object-completion-events"></a>

O objeto `AWS.Request` gera esses eventos de conclusão com base na resposta de cada método de operação de serviço:
+ `success`
+ `error`
+ `complete`

Você pode registrar uma função de retorno de chamada em resposta a qualquer um desses eventos. Para obter uma lista completa de todos os eventos de objeto da solicitação, consulte [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Request.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Request.html) na Referência da API.

### O evento "success"
<a name="request-success-event"></a>

O evento `success` é gerado após uma resposta bem-sucedida recebida do objeto de serviço. Veja aqui como registrar uma função de retorno de chamada para esse evento.

```
request.on('success', function(response) { 
  // event handler code
});
```

A resposta fornece uma propriedade `data`, que contém os dados de resposta serializada do serviço. Por exemplo, a chamada a seguir para o método `listBuckets` do objeto de serviço do Amazon S3.

```
s3.listBuckets.on('success', function(response) {
  console.log(response.data);
}).send();
```

retorna a resposta e imprime os conteúdos da propriedade `data` a seguir no console.

```
{ Owner: { ID: '...', DisplayName: '...' },
  Buckets: 
   [ { Name: 'someBucketName', CreationDate: someCreationDate },
     { Name: 'otherBucketName', CreationDate: otherCreationDate } ],
  RequestId: '...' }
```

### O evento "error"
<a name="request-error-event"></a>

O evento `error` é gerado após uma resposta de erro recebida do objeto de serviço. Veja aqui como registrar uma função de retorno de chamada para esse evento.

```
request.on('error', function(error, response) { 
  // event handling code
});
```

Quando o evento `error` é gerado, o valor da propriedade `data` da resposta é `null` e a propriedade `error` contém os dados do erro. O objeto `error` associado é passado como o primeiro parâmetro para a função de retorno de chamada registrada. Por exemplo, o seguinte código:

```
s3.config.credentials.accessKeyId = 'invalid';
s3.listBuckets().on('error', function(error, response) {
  console.log(error);
}).send();
```

retorna o erro e imprime os seguintes dados de erro no console.

```
{ code: 'Forbidden', message: null }
```

### O evento "complete"
<a name="request-complete-event"></a>

O evento `complete` é gerado quando uma chamada de objeto de serviço tiver sido concluída, independentemente de ela resultar em sucesso ou erro. Veja aqui como registrar uma função de retorno de chamada para esse evento.

```
request.on('complete', function(response) { 
  // event handler code
});
```

Use o retorno de chamada do evento `complete` para lidar com qualquer limpeza de solicitação que precise executar, independentemente de sucesso ou erro. Se você usar dados de resposta dentro de um retorno de chamada para o evento `complete`, primeiro verifique as propriedades `response.data` ou `response.error` para depois tentar acessar qualquer uma delas, conforme mostrado no exemplo a seguir.

```
request.on('complete', function(response) {
  if (response.error) {
    // an error occurred, handle it
  } else {
    // we can use response.data here
  }
}).send();
```

## Eventos HTTP do objeto da solicitação
<a name="request-object-http-events"></a>

O objeto `AWS.Request` gera esses eventos HTTP com base na resposta de cada método de operação de serviço:
+ `httpHeaders`
+ `httpData`
+ `httpUploadProgress`
+ `httpDownloadProgress`
+ `httpError`
+ `httpDone`

Você pode registrar uma função de retorno de chamada em resposta a qualquer um desses eventos. Para obter uma lista completa de todos os eventos de objeto da solicitação, consulte [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Request.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Request.html) na Referência da API.

### O evento "httpHeaders"
<a name="request-httpheaders-event"></a>

O evento `httpHeaders` é gerado quando cabeçalhos são enviados pelo servidor remoto. Veja aqui como registrar uma função de retorno de chamada para esse evento.

```
request.on('httpHeaders', function(statusCode, headers, response) {
  // event handling code
});
```

O parâmetro `statusCode` para a função de retorno de chamada é o código de status HTTP. O parâmetro `headers` contém os cabeçalhos de resposta.

### O evento "httpData"
<a name="request-httpdata-event"></a>

O evento `httpData` é gerado para transmitir pacotes de dados de resposta do serviço. Veja aqui como registrar uma função de retorno de chamada para esse evento.

```
request.on('httpData', function(chunk, response) {
  // event handling code
});
```

Esse evento é normalmente usado para receber grandes respostas em blocos quando não for prático carregar toda a resposta na memória. Esse evento tem um parâmetro `chunk` adicional que contém uma parte dos dados reais do servidor.

Se você registrar um retorno de chamada para o evento `httpData`, a propriedade `data` da resposta contém toda a saída serializada para a solicitação. Você deve remover o listener `httpData` padrão se você não tiver custos indiretos de memória e análise sintática adicional para os handlers incorporados.

### Os eventos "httpUploadProgress" e "httpDownloadProgress"
<a name="request-httpupload-download-progress-event"></a>

O evento `httpUploadProgress` é gerado quando a solicitação HTTP tiver carregado mais dados. Da mesma forma, o evento `httpDownloadProgress` é gerado quando a solicitação HTTP tiver baixado mais dados. Veja aqui como registrar uma função de retorno de chamada para esses eventos.

```
request.on('httpUploadProgress', function(progress, response) {
  // event handling code
})
.on('httpDownloadProgress', function(progress, response) {
  // event handling code
});
```

O parâmetro `progress` para a função de retorno de chamada contém um objeto com os bytes carregados e totais da solicitação.

### O evento "httpError"
<a name="request-httperror-event"></a>

O evento `httpError` é gerado quando a solicitação HTTP falhar. Veja aqui como registrar uma função de retorno de chamada para esse evento.

```
request.on('httpError', function(error, response) {
  // event handling code
});
```

O parâmetro `error` para a função de retorno de chamada contém o erro que foi lançado.

### O evento "httpDone"
<a name="request-httpdone-event"></a>

O evento `httpDone` é gerado quando o servidor terminar de enviar dados. Veja aqui como registrar uma função de retorno de chamada para esse evento.

```
request.on('httpDone', function(response) {
  // event handling code
});
```