2017-08-25 59 views
1

我需要將用戶的信息存儲在DynamoDB中,並將郵件發送到同一用戶(如果它尚不存在於DynamoDB表中)。我正在爲循環做這件事。該列表只包含2條記錄。問題是隻有第二條記錄被插入到表中並且郵件被髮送兩次給同一個用戶。下面是代碼:NodeJS:在dynamodb中插入記錄(如果不存在)

module.exports.AddUser = function(req, res, usersList, departmentId) { 
    var _emailId = ""; 
    var _userName = ""; 
    var _departmentId = departmentId; 

    for (var i = 0; i < usersList.length; i++) { 
     _emailId = usersList[i].emailId; 
     _userName = usersList[i].userName; 
     var params = { 
      TableName: "UsersTable", 
      Key: { 
       "emailId": _emailId, 
       "departmentId": _departmentId 
      } 
     }; 

     docClient.get(params, function(err, data) { 
      if (!err) { 
       if (!data.items) 
        AddUserAndSendEmail("UsersTable", _emailId, _userName); 
        //The above function is being called twice but for the same user. 
        //It has a check so not inserting the same record twice but 
        //sending two mails to the same user. 
      } 
     }); 
    } 
    res.end("success"); 
} 

function AddUserAndSendEmail(tableName, emailId, _userName) { 
    var params = { 
     TableName: tableName, 
     Item: { 
      "emailId": emailId, 
      "departmentId": 101//Default Department 
     } 
    }; 

    docClient.put(params, function(err, data) { 
     if (!err) { 
      //Send Email Code Here 
     } else { 
      console.log("error"); 
     } 
    }); 
} 

有什麼能爲這種奇怪的行爲的原因是什麼?真的很沮喪,我即將放棄這一點。

+0

其他條目的電子郵件地址是什麼?到目前爲止,代碼應該是正確的。 –

+0

@HeadhunterXamd他們都不一樣。驗證。 – user1640256

+0

也許檢查/顯示'AddUserAndSendEmail'後面的代碼?問題可能在於這個功能。 –

回答

0

1)請注意DynamoDB爲,最終一致爲。如果您插入項目並檢查項目是否立即存在,它可能並不總是在數據庫中找到該項目。

這意味着循環的第二次迭代可能不總是找到插入到表中的第一項。

2)如果該項目已經存在於表格中,Put api將更新該項目並給出成功的響應。

這意味着Put將在第二次迭代中成功地用於相同的email iddepartment id,因爲它會更新記錄,如果它已經存在。

GetItem - GetItem操作返回匹配主鍵的 項的一組屬性。 GetItem操作默認提供一個最終一致的讀取 。如果最終一致性讀取 不適用於您的應用程序,請使用ConsistentRead。

PutItem - 創建一個新的項目,或新項目 (包括所有屬性)取代舊的項目。如果具有相同主鍵的 指定表中已存在項目,則新項目將完全替換現有項目 。您還可以使用條件運算符 僅在其屬性值符合特定條件時才替換項目, 或僅在該項目不存在時才插入新項目。

基於以上幾點,有可能拿到兩封電子郵件,如果你有相同的email id以及陣列中department id

相關問題