73 votes

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

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

Comment puis-je utiliser async et attendre ici?

121voto

hoangdv Points 2752

Si vous utilisez aws-sdk avec la version> 2.x, vous pouvez transformer une fonction aws.Request en promesse avec la fonction 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 (dans le style de rappel).

Le e est un AWSError - Le premier paramètre de la fonction de rappel

note: await expression uniquement autorisée dans une fonction asynchrone

18voto

zero298 Points 1479

await nécessite une Promise. generateDataKey() renvoie un AWS.Request, pas un Promise. AWS.Request sont EventEmitters (plus ou moins) mais ont un promise méthode 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()
}());

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X