簡體   English   中英

如果 dynamodb 中不存在項目,則無法返回數組

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM