javascript - 什么可能导致 DynamoDB 表扫描既不返回数据又不返回错误?
问题描述
我有两个小的 DynamoDB 表,一个有 41 个项目,每个项目有 6 个属性,另一个有 40 个项目,每个项目有 2 个属性。两个表都使用主排序键和辅助排序键进行索引。
扫描较大的FHCClassSchedule 会返回正确的整个表内容。对较小的FHCRoomCounts进行扫描,既不返回数据,也不返回错误。DynamoDB文档说,如果扫描没有返回数据,它将返回错误。但这(似乎)不是正在发生的事情。
我见过Scan DynamoDB table is not returned 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 Cognito,但我还没有(还)掌握它。
更新 这对我来说是可变范围的重要一课。
变量counts
和data
“存在”在 dynamodb.scan 匿名回调函数的范围内。是函数作用域。我在范围之外访问它们,因此它们是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 将记录正确的data
内容counts
。块内的剩余代码else
将按预期工作。
非常感谢 AWS 出色的客户支持人员,他们致力于帮助我学习这一课。
解决方案
推荐阅读
- javascript - jQuery 小部件不适用于动态添加的表单集表单
- electron - Electron - 如何在我的应用程序中安装或使用第三方依赖项,例如 brew 或 apt-get 包?
- javascript - function initialize() 和 xmlhttp.onreadystatechange = function() 事件顺序
- android - AAC - 如何避免在视图模型中引用活动
- kotlin - Kotlin:为什么 val b (Map) 会在迭代中发生变化,即使动作发生在 do-while 循环中的另一个 var a 上?
- r - 如何使用 R/exams 包生成包含随机生成的单选答案的考试?
- c - 使用strcat时如何防止char数组被for循环覆盖
- excel - 在 Excel 中对同一工作表上的多个表应用动态格式
- android - 如何使用我编译的 android 即时应用项目
- android - 如何从 Kotlin 中的片段更改活动中的图像