

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 as promessas do JavaScript
<a name="using-promises"></a>

O método `AWS.Request.promise` fornece uma maneira de chamar uma operação de serviço assíncrona e gerenciar o fluxo em vez de usar retornos de chamada. No Node.js e nos scripts do navegador, um objeto `AWS.Request` é retornado quando a operação de serviço é chamada sem uma função de retorno de chamada. Você pode chamar o método `send` da solicitação para fazer a chamada de serviço.

No entanto, o `AWS.Request.promise` imediatamente começa a chamada de serviço e retorna uma promessa que é cumprida com a propriedade `data` da resposta ou rejeitada com a propriedade `error` da resposta.

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

// create the promise object
var promise = request.promise();

// handle promise's fulfilled/rejected states
promise.then(
  function(data) {
    /* process the data */
  },
  function(error) {
    /* handle the error */
  }
);
```

O exemplo a seguir retorna uma promessa que é atendida com um objeto `data` ou rejeitada com um objeto `error`. Usando promessas, um único retorno de chamada não é responsável por detectar erros. Em vez disso, o retorno de chamada correto é chamado com base no sucesso ou na falha de uma solicitação.

```
var s3 = new AWS.S3({apiVersion: '2006-03-01', region: 'us-west-2'});
var params = {
  Bucket: 'bucket',
  Key: 'example2.txt',
  Body: 'Uploaded text using the promise-based method!'
};
var putObjectPromise = s3.putObject(params).promise();
putObjectPromise.then(function(data) {
  console.log('Success');
}).catch(function(err) {
  console.log(err);
});
```

## Coordenar várias promessas
<a name="multiple-promises"></a>

Em algumas situações, seu código deve fazer várias chamadas assíncronas que exigem ação somente quando todos tiverem sido retornados com êxito. Se você gerenciar as chamadas individuais do método assíncrono com promessas, pode criar uma promessa adicional que usa o método `all`. Esse método cumpre essa promessa generalista se, e quando, a série de promessas que você passar para o método forem cumpridas. A função de retorno de chamada é transmitida a um array dos valores das promessas passadas para o método `all`.

No exemplo a seguir, uma função do AWS Lambda deve fazer três chamadas assíncronas para Amazon DynamoDB, mas só pode ser concluída após as promessas para cada chamada serem cumpridas.

```
Promise.all([firstPromise, secondPromise, thirdPromise]).then(function(values) {
  
  console.log("Value 0 is " + values[0].toString);
  console.log("Value 1 is " + values[1].toString);
  console.log("Value 2 is " + values[2].toString);

  // return the result to the caller of the Lambda function
  callback(null, values);
});
```

## Suporte de navegador e Node.js para promessas
<a name="browser-node-promise-support"></a>

O suporte para promessas de JavaScript nativo (ECMAScript 2015) depende do mecanismo JavaScript e da versão em que seu código é executado. Para ajudar a determinar o suporte para promessas de JavaScript em cada ambiente onde seu código precisa rodar, consulte a [Tabela Compatibilidade de ECMAScript](https://compat-table.github.io/compat-table/es6/) no GitHub.

## Usando outras implementações de promessa
<a name="using-other-promise-implementations"></a>

Além da implementação de promessa nativa no ECMAScript 2015, você também pode usar bibliotecas de promessa de terceiros, incluindo:
+ [bluebird](http://bluebirdjs.com)
+ [RSVP](https://github.com/tildeio/rsvp.js/)
+ [P](https://github.com/kriskowal/q)

Essas bibliotecas de promessa opcionais podem ser úteis se você precisar que seu código rode em ambientes que não são compatíveis com a implementação de promessa nativa no ECMAScript 5 e no ECMAScript 2015.

Para usar uma biblioteca de promessa de terceiros, defina uma dependência de promessas no SDK chamando o método `setPromisesDependency` do objeto de configuração global. No navegador de scripts, carregue a biblioteca de promessas de terceiros antes de carregar o SDK. No exemplo a seguir, o SDK é configurado para usar a implementação na biblioteca de promessas do bluebird.

```
AWS.config.setPromisesDependency(require('bluebird'));
```

Para voltar a usar a implementação de promessa nativa do mecanismo JavaScript, chame `setPromisesDependency` novamente, passando um `null` em vez do nome de uma biblioteca.