是什么原因导致DynamoDB表扫描不返回数据但也没有错误?

时间:2019-07-07 17:07:17

标签: javascript amazon-dynamodb dynamodb-queries

我有两个小的DynamoDB表,一个表具有41个项,每个项具有6个属性,一个具有40个项,每个项具有2个属性。这两个表都使用主排序键和辅助排序键进行索引。

扫描较大的 FHCClassSchedule 会返回正确的整个表内容。扫描较小的 FHCRoomCounts 不会返回任何数据并且也不会出现错误。 DynamoDB documentation说,如果扫描不返回任何数据,它将返回一个错误。但这(似乎)不是正在发生的事情。

我已经看到了问题Scan DynamoDB table is not returning data,但他的情况与我的情况有很大不同。他的桌子很大,没有索引。当需要多个请求时,他只发出一个扫描请求,因为该表超出了每个请求1MB的限制。这不是我的情况。

相关代码为:

var dynamodb = new AWS.DynamoDB();
var err;
var data;
var counts;
var paramsClassSchedule = {
                           TableName: 'FHCClassSchedule'
                          };
var paramsRoomCounts = {
                          TableName: 'FHCRoomCounts'
                       };
dynamodb.scan(paramsRoomCounts, function( err, counts ) {
  if( err ) {console.log('error @ .scan paramsRoomCounts, err == ', err);}

});
dynamodb.scan( paramsClassSchedule, function( err, data){
    if (err) { console.log('error @ .scan paramsClassSchedule, err == ', err); }
        else {
               console.log('(data, counts) : (', data, counts, ')');
               // other code processing counts & data
             }

console.log显示data是其中包含正确内容的对象。但是counts仍然是undefined,但没有返回错误。好像扫描请求没有被执行。

我已经检查了每个表的所有各种设置(“概述”,“项目”,“度量”,“警报” ...),它们是相同的。在这些设置中,关于 FHCRoomCounts 表的任何内容都无法将其与 FHCClassSchedule 表区分开。

所以,我很茫然。

编辑: 我会给您一个代码段,但是要使其连接到Amazon Web Services,我必须在代码段中放入访问密钥和“秘密”访问密钥。既然有了他们,人们就可以不受限制地访问我的帐户,因此我不愿意这样做。我会使用Amazon Cognito,但尚未掌握它。

更新 这是我在可变范围内的重要一课。

在dynamodb.scan匿名回调函数的范围内,变量countsdata“存在”。属于功能范围。我在范围之外访问它们,因此它们是undefined

我需要将访问和处理它们的JavaScript放入嵌套扫描中。答案是将两个扫描中的一个嵌套在另一个的回调函数中,然后将处理由回调返回的变量的js嵌套在最里面的嵌套扫描中。

正确的代码是:

function init() {

  dynamodb.scan(paramsRoomCounts, function( err, counts ) {
   if( err ) {console.log('error @ .scan paramsRoomCounts, err == ',    err);}

    dynamodb.scan( paramsClassSchedule, function( err, data){
      if (err) { console.log('error @ .scan paramsClassSchedule, err == ', err); }
      else {
             console.log('(data, counts) : (', data, counts, ')');
             // further js processing the data and counts variables

           }
    });  // end def callback & scan of paramsClassSchedule
  });  //  end def callback & scan of paramsRoomCounts
}  // end def function init()

现在,嵌套else块中的console.log将记录正确的datacounts内容。 else块中的其余代码将按预期工作。

非常感谢AWS出色的客户支持人员竭诚帮助我学习本课程。

0 个答案:

没有答案