Ich versuche, alle Datensätze aus einer DynamoDB-Tabelle mit Versprechungen zu erhalten. Das Problem ist, dass DynamoDB nicht alle Elemente in einem Aufruf zurückgibt, muss ich mehrere Anrufe tätigen. Wenn LastEvaluatedKey nicht null ist, muss ich einen weiteren Aufruf mit diesem Schlüssel durchführen, um die verbleibenden Datensätze zu erhalten. In meinem Code überprüfe ich dies und behebe nur, nachdem LastEvaluatedKey null ist. Aber die console.log("done")
wird nicht ausgeführt.Bluebird Versprechen Schleife
Hier ist mein Code:
function query(params) {
return new Promise(function(resolve, reject) {
docClient.query(params, function(err, data) {
if (err) {
reject(err)
} else {
resolve(data);
}
});
})
}
function getAllRecords(params, combinedData) {
return new Promise(function(resolve, reject) {
query(params)
.then(function(data) {
if(!combinedData) {
combinedData = [];
}
combinedData.push(data.Items);
if(data.LastEvaluatedKey) {
params.ExclusiveStartKey = data.LastEvaluatedKey;
getAllRecords(params, combinedData)
}
else {
resolve(combinedData);
}
})
})
}
getAllRecords(params)
.then(function() {
console.log('done')
})
.catch(function(error) {
console.log(error);
})
Es ist wahrscheinlich eine falsche Vorstellung darüber, wie Versprechungen Arbeit von meiner Seite. Wenn mir jemand eine Idee geben kann, wie man das macht. Das wäre großartig.
Vermeiden Sie die [ 'Promise' Konstruktor Antipattern] (http://stackoverflow.com/q/23803743/1048572)! – Bergi