

La AWS SDK per JavaScript v2 è arrivata. end-of-support [Ti consigliamo di migrare alla AWS SDK per JavaScript v3.](https://docs.aws.amazon.com//sdk-for-javascript/v3/developer-guide/) [Per ulteriori dettagli e informazioni su come effettuare la migrazione, consulta questo annuncio.](https://aws.amazon.com/blogs//developer/announcing-end-of-support-for-aws-sdk-for-javascript-v2/)

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Usare Promises JavaScript
<a name="using-promises"></a>

Il metodo `AWS.Request.promise` fornisce un modo per chiamare un'operazione di servizio e gestire il flusso asincrono invece di utilizzare i callback. In Node.js e negli script del browser, viene restituito un oggetto `AWS.Request` quando viene chiamata un'operazione di servizio senza una funzione di callback. Puoi chiamare il metodo `send` della richiesta per effettuare la chiamata di servizio.

Tuttavia, `AWS.Request.promise` avvia immediatamente la chiamata di servizio e restituisce una promessa soddisfatta con la proprietà `data` della risposta o respinta con la proprietà `error` della risposta.

```
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 */
  }
);
```

L'esempio seguente restituisce una promessa soddisfatta con un oggetto `data` o respinta con un oggetto `error`. Utilizzando le promesse, un singolo callback non è responsabile per il rilevamento degli errori. Al contrario, il callback corretto viene chiamato in base all'esito positivo o negativo di una richiesta.

```
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);
});
```

## Coordinamento di più promesse
<a name="multiple-promises"></a>

In alcune situazioni, il tuo codice deve effettuare più chiamate asincrone che richiedono un intervento solo quando sono state restituite tutte correttamente. Se gestisci tali chiamate singole al metodo asincrono con le promesse, puoi creare una promessa aggiuntiva che utilizza il metodo `all`. Questo metodo soddisfa questa promessa universale se e quando le promesse che trasferisci al metodo vengono soddisfatte. Alla funzione di callback viene trasferito una matrice dei valori delle promesse trasferite al metodo `all`.

Nell'esempio seguente, una AWS Lambda funzione deve effettuare tre chiamate asincrone ad Amazon DynamoDB, ma può essere completata solo dopo aver soddisfatto le promesse per ogni chiamata.

```
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);
});
```

## Supporto del browser e di Node.js per le promesse
<a name="browser-node-promise-support"></a>

Il supporto per JavaScript le promesse native (ECMAScript 2015) dipende dal JavaScript motore e dalla versione in cui viene eseguito il codice. Per determinare il supporto per le JavaScript promesse in ogni ambiente in cui il codice deve essere eseguito, consulta la [Tabella ECMAScript di compatibilità](https://compat-table.github.io/compat-table/es6/) su. GitHub

## Utilizzo di altre implementazioni di promesse
<a name="using-other-promise-implementations"></a>

Oltre all'implementazione nativa di Promise nel ECMAScript 2015, puoi anche utilizzare librerie di promesse di terze parti, tra cui:
+ [bluebird](http://bluebirdjs.com)
+ [RSVP](https://github.com/tildeio/rsvp.js/)
+ [Q](https://github.com/kriskowal/q)

Queste librerie di promesse opzionali possono essere utili se hai bisogno che il codice venga eseguito in ambienti che non supportano l'implementazione nativa di promise nel ECMAScript 5 e nel ECMAScript 2015.

Per utilizzare una libreria di promesse di terze parti, imposta una dipendenza per le promesse sull'SDK chiamando il metodo `setPromisesDependency` dell'oggetto di configurazione globale. Negli script del browser, assicurati di caricare la libreria di promesse di terze parti prima di caricare l'SDK. Nell'esempio seguente, l'SDK è configurato per utilizzare l'implementazione nella libreria di promesse bluebird.

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

Per tornare a utilizzare l'implementazione nativa di promise del JavaScript motore, `setPromisesDependency` richiama, passando un nome di libreria `null` anziché un nome di libreria.