如何通过 AWS SDK 使用 Async 和 Await Javascript
How to use Async and Await with AWS SDK Javascript
我正在使用 KMS 库使用 AWS SDK。我想使用 async 和 await 而不是回调。
import AWS, { KMS } from "aws-sdk";
this.kms = new AWS.KMS();
const key = await this.kms.generateDataKey();
然而,当包裹在异步函数中时,这不起作用。
如何在这里使用 async 和 await?
await
需要 Promise
。 generateDataKey()
returns a AWS.Request
, not a Promise
. AWS.Request
are EventEmitters
(more or less) but have a 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.x 的 aws-sdk,您可以将 aws.Request
转换为具有链 .promise()
函数的承诺。
对于您的情况:
try {
let key = await kms.generateDataKey().promise();
} catch (e) {
console.log(e);
}
key
是一个 KMS.Types.GenerateDataKeyResponse
- 回调的第二个参数(在回调样式中)。
e
是一个 AWSError
- 回调函数的第一个参数
注意:await
表达式只允许在异步函数中使用
从 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;
};
适用于 JavaScript v3 新功能的 AWS SDK
我正在使用 KMS 库使用 AWS SDK。我想使用 async 和 await 而不是回调。
import AWS, { KMS } from "aws-sdk";
this.kms = new AWS.KMS();
const key = await this.kms.generateDataKey();
然而,当包裹在异步函数中时,这不起作用。
如何在这里使用 async 和 await?
await
需要 Promise
。 generateDataKey()
returns a AWS.Request
, not a Promise
. AWS.Request
are EventEmitters
(more or less) but have a 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.x 的 aws-sdk,您可以将 aws.Request
转换为具有链 .promise()
函数的承诺。
对于您的情况:
try {
let key = await kms.generateDataKey().promise();
} catch (e) {
console.log(e);
}
key
是一个 KMS.Types.GenerateDataKeyResponse
- 回调的第二个参数(在回调样式中)。
e
是一个 AWSError
- 回调函数的第一个参数
注意:await
表达式只允许在异步函数中使用
从 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;
};
适用于 JavaScript v3 新功能的 AWS SDK