Как использовать Async и Await с AWS SDK Javascript
Я работаю с SDK AWS, используя библиотеку KMS. Я хотел бы использовать async и ждать вместо обратных вызовов.
import AWS, { KMS } from "aws-sdk";
this.kms = new AWS.KMS();
const key = await this.kms.generateDataKey();
Однако это не работает, когда завернуты в асинхронную функцию.
Как я могу использовать async и ждать здесь?
Ответы
Ответ 1
Если вы используете aws-sdk с версией> 2.x, вы можете aws.Request
в обещание с .promise()
функции chain .promise()
. Для вашего случая:
try {
let key = await kms.generateDataKey().promise();
} catch (e) {
console.log(e);
}
key
является KMS.Types.GenerateDataKeyResponse
- второй параметр обратного вызова (в стиле обратного вызова).
e
- это AWSError
- первый параметр функции обратного вызова
примечание: выражение await
допускается только в асинхронной функции
Ответ 2
await
требует Promise
. generateDataKey()
возвращает AWS.Request
, а не Promise
. AWS.Request
являются EventEmitters
(более или менее), но имеют 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()
}());