約束を使ってDynamoDBテーブルからすべてのレコードを取得しようとしています。問題は、DynamoDBが複数の呼び出しを行う必要がある呼び出しですべての項目を返さないということです。 LastEvaluatedKeyがnullでない場合は、残りのレコードを取得するためにそのキーで別の呼び出しを行う必要があることを意味します。私のコードでは、それをチェックし、LastEvaluatedKeyがnullの場合にのみ解決します。しかし、console.log("done")
は実行されていません。Bluebird約束ループ
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