我想從使用承諾的DynamoDB表中獲取所有記錄。問題是DynamoDB不會在一次調用中返回所有項目,我必須進行多次調用。如果LastEvaluatedKey不爲空意味着我需要使用該密鑰進行另一次調用以獲取剩餘的記錄。在我的代碼中,我正在檢查並僅在LastEvaluatedKey爲空之後解析。但是console.log("done")
沒有被執行。藍鳥諾言循環
這裏是我的代碼:
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);
})
這也可能是在承諾如何從我的一部分工作的誤解。如果有人可以給我一個想法如何使這項工作。那太好了。
避免['Promise'構造反模式](http://stackoverflow.com/q/23803743/1048572)! – Bergi