Javascript 蓝鸟承诺环

Javascript 蓝鸟承诺环,javascript,promise,amazon-dynamodb,bluebird,Javascript,Promise,Amazon Dynamodb,Bluebird,我正在尝试使用promises从DynamoDB表中获取所有记录。问题是DynamoDB不能在一次调用中返回所有项目,我必须进行多次调用。如果LastEvaluatedKey不为null,则表示我需要使用该键进行另一次调用以获取剩余记录。在我的代码中,我只在LastEvaluatedKey为null后检查并解析。但是没有执行console.log(“done”) 这是我的密码: function query(params) { return new Promise(function(re

我正在尝试使用promises从DynamoDB表中获取所有记录。问题是DynamoDB不能在一次调用中返回所有项目,我必须进行多次调用。如果LastEvaluatedKey不为null,则表示我需要使用该键进行另一次调用以获取剩余记录。在我的代码中,我只在LastEvaluatedKey为null后检查并解析。但是没有执行
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
构造函数。您已经在
query()
函数中实现了这一点,因此您不需要在
getAllRecords()
函数中使用
Promise
构造函数

您应该这样做:

function getAllRecords(params) {
    return query(params).then(function (data) {
        var items = [data.Items];

        if(data.LastEvaluatedKey) {
            params.ExclusiveStartKey = data.LastEvaluatedKey;

            return getAllRecords(params).then(function (theRest) {
                return items.concat(theRest);
            });
        }

        return items;
    });
}

避开这个!因为promise反模式,所以将此作为答案。谢谢