web-dev-qa-db-ja.com

AWS SDK JavascriptでAsyncとAwaitを使用する方法

KMSライブラリを使用してAWS SDKを使用しています。コールバックの代わりにasyncとawaitを使用したいと思います。

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

this.kms = new AWS.KMS();

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

ただし、非同期関数でラップされている場合、これは機能しません。

非同期を使用してここで待機するにはどうすればよいですか?

36
Kay

バージョン> 2.xでaws-sdkを使用している場合、aws.Requestをチェーン.promise()関数を持つpromiseに変換できます。あなたの場合:

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

keyKMS.Types.GenerateDataKeyResponseです-コールバックの2番目のパラメーター(コールバックスタイル)。

eAWSErrorです-コールバックfuncの最初のパラメーター

注:await式は非同期関数内でのみ許可されます

62
hoangdv

awaitにはPromiseが必要です。 generateDataKey() は、Promiseではなく、 AWS.Request を返します。 AWS.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()
}());
7
zero298