Первое, что я рекомендую вам, это использовать встроенную функцию promisify , чтобы функции AWS SDK возвращали promise
. Это более читабельно! Затем вы можете воспользоваться обещаниями node.js для обработки асинхронного кода, вы можете использовать его так:
const util = require('util');
const safePromisify = function (fun, methodsArray) {
const suffix = 'Async';
methodsArray.forEach(method => {
fun[method + suffix] = util.promisify(fun[method]);
});
}
safePromisify(dynamoDb, ['scan']);
const newItems = items.map(function async(item, i) {
// ^^^^^ this is required to use await
// Note the async and await keywords
let ge_result = await dynamoDb.scanAsync({
TableName: GIVEAWAY_ENTRIES_TABLE,
FilterExpression: "giveawayId = :giveawayId",
ExpressionAttributeValues: {
":giveawayId": item.id
}
});
let result = await dynamoDb.scanAsync({
TableName: USERS_TABLE,
FilterExpression: "sessionId = :sii",
ExpressionAttributeValues: {
":sii": sessionId
}
});
let gemc_result = await dynamoDb.scanAsync({
TableName: GIVEAWAY_ENTRIES_TABLE,
FilterExpression: "giveawayId = :giveawayId and userId = :userId",
ExpressionAttributeValues: {
":giveawayId": item.id,
":userId": result.Items[0].id
}
});
return {
id: item.id,
title: item.title,
thumbnail: item.thumbnail,
photo: item.photo,
description: item.description,
myCount: gemc_result.Count,
totalCount: ge_result.Count
}
});
Примечание: Вы должны добавить слово Async
к вызову функции