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