如何通过AWS开发工具包Javascript使用Async and Await

时间:2018-07-13 15:18:07

标签: node.js aws-sdk aws-kms

我正在使用KMS库使用AWS开发工具包。我想使用异步和等待而不是回调。

import AWS, { KMS } from "aws-sdk";

this.kms = new AWS.KMS();

const key = await this.kms.generateDataKey();

但是,当包装到异步函数中时,此方法不起作用。

我如何使用异步并在这里等待?

3 个答案:

答案 0 :(得分:45)

如果使用版本> 2.x的aws-sdk,则可以将aws.Request转换为具有链.promise()功能的promise。 对于您的情况:

  try {
    let key = await kms.generateDataKey().promise();
  } catch (e) {
    console.log(e);
  }

keyKMS.Types.GenerateDataKeyResponse-回调的第一个参数(采用回调样式)。

eAWSError-回调函数的第二个参数

注意:await表达式仅在异步函数中允许

答案 1 :(得分:5)

await需要一个PromisegenerateDataKey()返回AWS.Request,而不是PromiseAWS.RequestEventEmitters(或多或少),但是有一种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 新功能