Node.js 如何在AWS SDK Javascript中使用Async和Wait

Node.js 如何在AWS SDK Javascript中使用Async和Wait,node.js,aws-sdk,aws-kms,Node.js,Aws Sdk,Aws Kms,我正在使用KMS库使用AWS SDK。我想使用async和Wait代替回调 import AWS, { KMS } from "aws-sdk"; this.kms = new AWS.KMS(); const key = await this.kms.generateDataKey(); 但是,当包装在异步函数中时,这不起作用 在这里如何使用async和await?await需要一个承诺。返回承诺,而不是承诺AWS.Request是EventEmitter(或多或少),但有一个可以使用的

我正在使用KMS库使用AWS SDK。我想使用async和Wait代替回调

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

this.kms = new AWS.KMS();

const key = await this.kms.generateDataKey();
但是,当包装在异步函数中时,这不起作用


在这里如何使用async和await?

await
需要一个
承诺。返回承诺,而不是
承诺
AWS.Request
EventEmitter
(或多或少),但有一个可以使用的方法

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()
}());

如果您使用的aws sdk版本>2.x,则可以使用chain
.promise()
函数将
aws.Request
转换为promise。 对于您的情况:

  try {
    let key = await kms.generateDataKey().promise();
  } catch (e) {
    console.log(e);
  }
是一个
KMS.Types.GenerateDataKeyResponse
——回调的第二个参数(回调样式)

e
是一个
AWSError
——回调函数的第一个参数


注意:
await
表达式只允许在异步函数中使用

await
需要承诺;这需要回调。如何在try语句之外访问
key
?@mbspark您可以首先在
try
块之外创建
key
变量。但是,为什么?我想在程序的其他地方使用
键。不过,我最终还是以一种不同的方式弄明白了我想做什么。。。。