我正在使用KMS库使用AWS开发工具包。我想使用异步和等待而不是回调。
import AWS, { KMS } from "aws-sdk";
this.kms = new AWS.KMS();
const key = await this.kms.generateDataKey();
但是,当包装到异步函数中时,此方法不起作用。
我如何使用异步并在这里等待?
答案 0 :(得分:45)
如果使用版本> 2.x的aws-sdk,则可以将aws.Request
转换为具有链.promise()
功能的promise。
对于您的情况:
try {
let key = await kms.generateDataKey().promise();
} catch (e) {
console.log(e);
}
key
是KMS.Types.GenerateDataKeyResponse
-回调的第一个参数(采用回调样式)。
e
是AWSError
-回调函数的第二个参数
注意:await
表达式仅在异步函数中允许
答案 1 :(得分:5)
await
需要一个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()
}());
答案 2 :(得分:1)
从 2021 年开始,我建议使用 AWS SDK for JavaScript v3。它是对 v2 的重写,具有一些很棒的新功能
示例代码:
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 新功能