我想从使用承诺的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