web-dev-qa-db-fra.com

Comment utiliser Async et Await avec AWS SDK Javascript

Je travaille avec le kit SDK AWS à l'aide de la bibliothèque KMS. Je voudrais utiliser async et attendre au lieu de rappels.

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

this.kms = new AWS.KMS();

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

Toutefois, cela ne fonctionne pas, lorsqu'il est encapsulé dans une fonction asynchrone.

Comment puis-je utiliser async et attendre ici?

36
Kay

Si vous utilisez aws-sdk avec la version> 2.x, vous pouvez convertir un aws.Request en une promesse avec la chaîne .promise(). Pour votre cas:

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

le key est un KMS.Types.GenerateDataKeyResponse - le deuxième paramètre de rappel (en style de rappel).

e est un AWSError - Le premier paramètre de callback func

remarque: l'expression await est autorisée uniquement dans une fonction asynchrone

62
hoangdv

await nécessite un Promise. generateDataKey() renvoie un AWS.Request , pas un Promise. _AWS.Request_ sont EventEmitters (plus ou moins) mais ont une méthode promise que vous pouvez utiliser.

_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