Dynamodb รับประมาณ 10,000 t0 30,000 บันทึก nodejs

getDBResults(id,
startDate_Timestamp,
endDate_Timestamp).then(data, 
err)=>  {
if (err) console.log("EE", err);
console.log("DD",data);
if (data.length != 0) {
 res.json({ "Status": 200, "Data": data });
 }
 })

 function getDBResults(id, startDate_Timestamp, 
 endDate_Timestamp) {
 var q = Q.defer();
 const params = {
 TableName: 'TableName',
 KeyConditionExpression: '#Id=:Id AND #Timestamp BETWEEN  
:start_date AND :end_date',
ExpressionAttributeNames: {
  "#Timestamp": "Timestamp",
  "#Id": "Id"
},
ExpressionAttributeValues: {
  ":Id": id,
  ":start_date": startDate_Timestamp,
  ":end_date": endDate_Timestamp
}
};
var results = [];
var callback = function (err, data) {
console.log("DD", data);
if (err) {
  console.log('Dynamo fail ' + err);
  q.reject(err);
} else if (data.LastEvaluatedKey) {
  params.ExclusiveStartKey = data.LastEvaluatedKey;
  docclient.query(params, callback);
} else {
  console.log("RR",results);
  q.resolve(results);
}
data.Items.forEach(function (item) {
  results.push(item);
});
}
docclient.query(params, callback);
return q.promise;
}

ด้วยรหัสนี้ ฉันไม่ได้รับผลลัพธ์ใดๆ และผลลัพธ์ของรหัสนั้นมีบันทึกเกือบ 20,000 ถึง 30,000 รายการ ฉันต้องการดึงบันทึกทั้งหมด แต่ไม่ได้บันทึกสิ่งใดบนคอนโซล aws โปรดช่วยฉันคิดออก


person Aditya Sharma    schedule 08.12.2018    source แหล่งที่มา
comment
มันจะช่วยทำความสะอาดโค้ดของคุณ ซึ่งตอนนี้อ่านยากแล้ว เริ่มต้นด้วยการเยื้องและวางโค้ดที่ควรอยู่ในบรรทัดเดียวในหนึ่งบรรทัด   -  person Costin    schedule 10.12.2018


คำตอบ (1)


ไม่แน่ใจว่านี่เป็นวิธีแก้ปัญหา แต่ฉันจะพยายามแทรกใน results ก่อนที่จะเรียกแบบสอบถามใหม่:

} else if (data.LastEvaluatedKey) {
    // save items
    data.Items.forEach(function (item) { results.push(item); });        
    params.ExclusiveStartKey = data.LastEvaluatedKey;
    docclient.query(params, callback);
}

คำแนะนำ: ลองคิดถึงการใช้คำสัญญาสิ สัญญาจะใช้งานได้ง่ายกว่า รหัสของคุณคือ "callback hell" :)

person Costin    schedule 09.12.2018
comment
ใช้มากขึ้น ทั้งหมดที่ฉันเห็นคือฟังก์ชัน callback :) - person Costin; 10.12.2018
comment
คุณช่วยมีรหัสสัญญาได้ไหม ฉันต้องการใช้ฟังก์ชันการทำงานโดยที่จะมี Foreach โดยที่ทีละรายการฉันต้องการดึงข้อมูลบันทึกทั้งหมดและหยุดการวนซ้ำจนกว่าข้อมูลทั้งหมดของ ID เดียวจะมาจาก dynamodb หากคุณสามารถช่วยได้ - person Aditya Sharma; 10.12.2018