I am working with the AWS SDK using the KMS libary. I would like to use async and await instead of callbacks.
import AWS, { KMS } from "aws-sdk"; this.kms = new AWS.KMS(); const key = await this.kms.generateDataKey();
However this does not work, when wrapped in an async function.
How can i use async and await here?
The await operator is used to wait for a Promise . It can only be used inside an async function within regular JavaScript code; however it can be used on its own with JavaScript modules.
Advanced operations. The AWS SDK for Java 2. x uses Netty , an asynchronous event-driven network application framework, to handle I/O threads.
JavaScript Async FunctionsAsync and await are built on promises. The keyword “async” accompanies the function, indicating that it returns a promise. Within this function, the await keyword is applied to the promise being returned. The await keyword ensures that the function waits for the promise to resolve.
If you are using aws-sdk with version > 2.x, you can tranform a aws.Request
to a promise with chain .promise()
function. For your case:
try { let key = await kms.generateDataKey().promise(); } catch (e) { console.log(e); }
the key
is a KMS.Types.GenerateDataKeyResponse
- the second param of callback(in callback style).
The e
is a AWSError
- The first param of callback func
note: await
expression only allowed within an async function
await
requires a Promise
. generateDataKey()
returns a AWS.Request
, not a Promise
. AWS.Request
are EventEmitters
(more or less) but have a promise
method that you can use.
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() }());
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With