JavaScript Usare Promises - AWS SDK for JavaScript

Abbiamo annunciato l'imminente uscita end-of-support per la AWS SDK for JavaScript v2. Ti consigliamo di migrare alla AWS SDK for JavaScript v3. Per date, dettagli aggiuntivi e informazioni su come effettuare la migrazione, consulta l'annuncio collegato.

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à.

JavaScript Usare Promises

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

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

Il supporto per le JavaScript 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 di compatibilità ECMAScript su. GitHub

Utilizzo di altre implementazioni di promesse

Oltre al promessa nativa di implementazione in ECMAScript 2015, è anche possibile usare le librerie di promessa di terze parti, tra cui:

Queste librerie di promesse facoltative possono essere utili se è necessario eseguire il codice in ambienti che non supportano l'implementazione di promesse native in ECMAScript 5 ed 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.