[英]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.