[英]Cannot return array if item not present in dynamodb
我有一个函数,它将一系列jobs
作为其中的参数。 此函数将通过其id
检查数据库中每个job
的存在。
如果某个作业不存在于数据库中,则需要将该特定作业推送到名为latestJobs
的数组中。 我在main.js
文件中调用这个函数。 但是代码中断并停止。
下面是我的main.js代码:
module.exports.app = async () => {
try {
...
const jobs = await getJobsForCountries(body);
const latestJobs = await filterPreDraftedJobs(jobs);
console.log('latestJobs', latestJobs);
} catch (e) {
console.error('Error:- ', e); // Comes to here
}
};
我的检查器功能如下所示:
module.exports = async (jobs) => {
let latestJobs = [];
for (const job of jobs) {
const params = {
TableName: process.env.DYNAMODB_TABLE,
Key: {
id: job.Id
}
};
await dynamoDb.get(params, (err, data) => {
if (err) {
latestJobs.push(job);
console.log('Job not found in DB');
}
}).promise();
}
return latestJobs;
};
我该如何解决这个问题? 我想要不会出现在数据库中的latestJobs
。 dynamodb 是否有可以为我执行此操作的功能?
您正在混合回调、承诺和等待风格。 我会这样做
module.exports = async (jobs) => {
let latestJobs = [];
for (const job of jobs) {
const params = {
TableName: process.env.DYNAMODB_TABLE,
Key: {
id: job.Id
}
};
try {
const result = await dynamoDb.get(params).promise();
if (result) {
return;
}
} catch(err) {
latestJobs.push(job);
}
}
return latestJobs;
};
此外,请确保创建了表并且您传递的区域和名称正确无误。
我对dynamoDB
不是很熟悉,但是看上面的对话代码一定是这样的。 我试图提高性能并确保代码是模块化的和可读的。
async function addUpdateJobs(jobs)
{
let paramsArray = [];
for (const job of jobs)
{
const jobParams = {
params:{
TableName: process.env.DYNAMODB_TABLE,
Key: {
id: job.Id
}
},
job:job
};
paramsArray.push(jobParams );
}
return await this.getJobs(paramsArray);
}
function getJobs(paramsArray)
{
let latestJobs = [];
paramsArray.each(async (jobParam)=>
{
try
{
const result = await dynamoDb.get(jobParam.params).promise();
if (result)
{
return;
}
} catch (err)
{
latestJobs.push(jobParam.job);
}
});
return latestJobs;
}
PS:另外我是通过错误处理gonig在amazondynamodb 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.