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