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