我正在使用KMS库与AWS SDK一起工作。我想使用async和await代替回调函数。
import AWS, { KMS } from "aws-sdk";
this.kms = new AWS.KMS();
const key = await this.kms.generateDataKey();
然而,当它包裹在异步函数中时,这种方法不起作用。
我该如何在此处使用async和await?
我正在使用KMS库与AWS SDK一起工作。我想使用async和await代替回调函数。
import AWS, { KMS } from "aws-sdk";
this.kms = new AWS.KMS();
const key = await this.kms.generateDataKey();
然而,当它包裹在异步函数中时,这种方法不起作用。
我该如何在此处使用async和await?
.promise()
将 aws.Request
转换为 Promise。
对于您的情况: try {
let key = await kms.generateDataKey().promise();
} catch (e) {
console.log(e);
}
“key”是回调函数中的第二个参数 - 一个KMS.Types.GenerateDataKeyResponse
。
“e”是回调函数中的第一个参数 - 一个AWSError
。
注意:只有在异步函数内才允许使用await
表达式。
try
块外部创建key
变量。但是,为什么要这样做呢? - hoangdvkey
。不过,最终我还是以另一种方式解决了我所尝试做的事情。 - mbsparkawait
需要一个Promise
。 generateDataKey()
返回一个AWS.Request
,而不是一个Promise
。AWS.Request
是EventEmitters
(或多或少),但它们有一个promise
方法可供使用。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()
}());
const { KMSClient, GenerateDataKeyCommand } = require('@aws-sdk/client-kms');
const generateDataKey = async () => {
const client = new KMSClient({ region: 'REGION' });
const command = new GenerateDataKeyCommand({ KeyId: 'KeyId' });
const response = await client.send(command);
return response;
};
AWS SDK for JavaScript v3 新特性