问题
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?
回答1:
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
回答2:
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()
}());
来源:https://stackoverflow.com/questions/51328292/how-to-use-async-and-await-with-aws-sdk-javascript