如何使用AWS SDK Javascript进行Async和Await

Kay*_*Kay 40 node.js aws-sdk aws-kms

我正在使用KMS库使用AWS SDK.我想使用async和await而不是回调.

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

this.kms = new AWS.KMS();

const key = await this.kms.generateDataKey();
Run Code Online (Sandbox Code Playgroud)

但是,当包含在异步函数中时,这不起作用.

我怎么能在这里使用async并等待?

hoa*_*gdv 71

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

  try {
    let key = await kms.generateDataKey().promise();
  } catch (e) {
    console.log(e);
  }
Run Code Online (Sandbox Code Playgroud)

key是一个KMS.Types.GenerateDataKeyResponse- 回调的第一个参数(回调样式).

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

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


zer*_*298 9

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()
}());
Run Code Online (Sandbox Code Playgroud)