gpt4 book ai didi

javascript - 在执行新函数之前,如何等待两个 DynamoDB 调用完成?

转载 作者:行者123 更新时间:2023-12-01 00:47:30 25 4
gpt4 key购买 nike

我正在尝试对 DynamoDB 执行两个异步函数。
在继续执行以下步骤(发送包含其数据的电子邮件)之前,我需要两者返回数据。
我该如何解决这个问题?

我使用以下代码:


var productParams = {
TableName: productsTable,
FilterExpression: 'client = :this_client',
ExpressionAttributeValues: { ':this_client': "someclient" }
};

dynamoClient.scan(productParams, function (err, data) {
if (err) {
console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
} else {
console.log("Query succeeded.");
data.Items.forEach(item => {
products.push(item)
});
}
});

var retailerParams = {
TableName: retailersTable,
FilterExpression: 'leadTime = :this_leadTime',
ExpressionAttributeValues: { ':this_leadTime': 42 }
};

dynamoClient.scan(retailerParams, function (err, data) {
if (err) {
console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
} else {
console.log("Query succeeded.");
data.Items.forEach(item => {
retailers.push(item)
});
}
});

var email = {
"Source": "somemail@gmail.com",
"Template": "some_template",
"Destination": {
"ToAddresses": ["somemail@gmail.com"]
},
"TemplateData": `{somedata}`
}
await ses.sendTemplatedEmail(email).promise();

最佳答案

您可以将 DynamoDB 调用转换为 Promise(通过将 scan 调用与 .promise() 调用链接起来)和 await 调用。他们使用 Promise.all发送电子邮件之前:

var productParams = {
TableName: productsTable,
FilterExpression: 'client = :this_client',
ExpressionAttributeValues: { ':this_client': "someclient" }
};

const productsPromise = dynamoClient.scan(productParams).promise()
.then(data => {
data.Items.forEach(item => {
products.push(item)
});
})
.catch(err => {
console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
});

var retailerParams = {
TableName: retailersTable,
FilterExpression: 'leadTime = :this_leadTime',
ExpressionAttributeValues: { ':this_leadTime': 42 }
};

const retailersPromise = dynamoClient.scan(retailerParams).promise()
.then(data => {
console.log("Query succeeded.");
data.Items.forEach(item => {
retailers.push(item)
});
})
.catch(err => {
console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
});


await Promise.all([
productsPromise,
retailersPromise
]);

var email = {
"Source": "somemail@gmail.com",
"Template": "some_template",
"Destination": {
"ToAddresses": ["somemail@gmail.com"]
},
"TemplateData": `{somedata}`
}

await ses.sendTemplatedEmail(email).promise();

关于javascript - 在执行新函数之前,如何等待两个 DynamoDB 调用完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57256834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com