Uso de JavaScript Promesas - AWS SDK for JavaScript

LaAWS SDK for JavaScript versión 3 (v3) es una reescritura de la versión 2 con algunas funciones nuevas y excelentes, incluida la arquitectura modular. Para obtener más información, consulte la Guía para desarrolladores de la versiónAWS SDK for JavaScript 3.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso de JavaScript Promesas

El método AWS.Request.promise proporciona una forma de llamar a una operación de servicio y administrar el flujo asíncrono en lugar de utilizar devoluciones de llamada. En Node.js y en los scripts de navegador, se devuelve un objeto AWS.Request cuando se llama a una operación de servicio sin una función de devolución de llamada. Puede llamar al método send de la solicitud para realizar la llamada de servicio.

Sin embargo, AWS.Request.promise comienza inmediatamente la llamada de servicio y devuelve una promesa que se cumple con la propiedad data de la respuesta o se rechaza con la propiedad error de la respuesta.

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

En el siguiente ejemplo se devuelve una promesa que se cumple con un objeto data o se rechaza con un objeto error. Con el uso de las promesas, una única devolución de llamada no es responsable de la detección de errores. En su lugar, se llama a la devolución de llamada correcta en función del éxito o el error de una solicitud.

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

Coordinación de varias promesas

En algunas situaciones, el código debe realizar varias llamadas asíncronas que requieren acción solo cuando todas han tenido una devolución correcta. Si administra estas llamadas a métodos asíncronas individuales con promesas, puede crear una promesa adicional que utilice el método all. Este método cumple esta promesa paraguas en el momento en que transfiere la matriz de promesas al método siempre y cuando dicha matriz de promesas se cumpla. Se transfiere a la función de devolución de llamada una matriz de los valores de las promesas que se transfieren al método all.

En el siguiente ejemplo, unAWS Lambdadebe realizar tres llamadas asíncronas a Amazon DynamoDB, pero solo puede completarse después de que las promesas para cada llamada se cumplan.

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

Compatibilidad del navegador y Node.js con las promesas

Support para nativos JavaScript promesas (ECMAScript 2015) depende del JavaScript motor y versión en los que se ejecuta el código. Para ayudar a determinar el soporte para JavaScript promesas en cada entorno donde el código necesita ejecutarse, consulte laTabla de compatibilidad de ECMAScripten GitHub.

Uso de otras implementaciones de promesas

Además de la implementación de promesas nativa de ECMAScript 2015, también puede utilizar bibliotecas de promesas de terceros, como:

Estas bibliotecas de promesas opcionales pueden ser útiles si necesita que el código se ejecute en entornos que no admitan la implementación de promesas nativas en ECMAScript 5 y en ECMAScript de 2015.

Para utilizar una biblioteca de promesas de terceros, establezca una dependencia de promesas en el SDK llamando al método setPromisesDependency del objeto de configuración global. En los scripts de navegador, asegúrese de cargar la biblioteca de promesas de terceros antes de cargar el SDK. En el siguiente ejemplo, el SDK está configurado para utilizar la implementación en la biblioteca de promesas bluebird.

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

Para volver a utilizar la implementación de promesas nativas del JavaScript engine, llamesetPromisesDependencyotra vez, pasando unnullen lugar de un nombre de biblioteca.