nodejs node example aws node.js aws-sdk aws-kms

node.js - node - aws sdk upload file to s3



Cómo usar Async y Esperar con AWS SDK Javascript (2)

Estoy trabajando con el SDK de AWS utilizando la biblioteca KMS. Me gustaría usar async y esperar en lugar de devoluciones de llamada.

import AWS, { KMS } from "aws-sdk"; this.kms = new AWS.KMS(); const key = await this.kms.generateDataKey();

Sin embargo, esto no funciona, cuando se envuelve en una función asíncrona.

¿Cómo puedo usar async y esperar aquí?


Si está utilizando aws-sdk con la versión> 2.x, puede realizar una aws.Request una promesa con la función de cadena .promise() . Para su caso:

try { let key = await kms.generateDataKey().promise(); } catch (e) { console.log(e); }

la key es un KMS.Types.GenerateDataKeyResponse - el primer parámetro de devolución de llamada (en el estilo de devolución de llamada).

La e es un AWSError - El segundo parámetro de la función de devolución de llamada

nota: await expresión solo permitida dentro de una función asíncrona


await requiere una Promise . generateDataKey() devuelve una AWS.Request , no una Promise . AWS.Request son EventEmitters (más o menos) pero tienen un método de promise que puede usar.

import AWS, { KMS } from "aws-sdk"; (async function() { const kms = new AWS.KMS(); const keyReq = kms.generateDataKey() const key = await keyReq.promise(); // Or just: // const key = await kms.generateDataKey().promise() }());